JetPack學(xué)習(xí)筆記之DataBinding(四)
為了讓布局文件能夠承擔(dān)更多的工作绞吁,處理更復(fù)雜的業(yè)務(wù)邏輯军援,DataBinding庫(kù)允許我們自定義BindAdapter绍些,下面將通過(guò)ImageView演示如何自定義BindAdapter可训。
1预麸、準(zhǔn)備工作瞪浸,添加Picasso依賴(lài),分配網(wǎng)絡(luò)權(quán)限吏祸。
implementation 'com.squareup.picasso:picasso:2.71828'
<uses-permission android:name="android.permission.INTERNET"/>
2对蒲、編寫(xiě)處理圖片的BindAdapter類(lèi)。
/**
* 項(xiàng)目名稱(chēng) JetPackPro
* 創(chuàng)建人 xiaojinli
* 創(chuàng)建時(shí)間 2020/8/7 12:19 PM
**/
public class ImageViewBindingAdapter {
@BindingAdapter("image")
public static void setImage(ImageView imageView,String imageUrl){
if(!TextUtils.isEmpty(imageUrl)){
Picasso.get()
.load(imageUrl)
.placeholder(R.mipmap.ic_launcher_round)
.error(R.drawable.ic_launcher_background)
.into(imageView);
}else{
imageView.setBackgroundColor(Color.BLACK);
}
}
}
注意
- 其中的方法均為靜態(tài)方法贡翘,第一個(gè)參數(shù)為調(diào)用者本身蹈矮,第二個(gè)參數(shù)是布局文件在調(diào)用該方法時(shí)需要傳遞過(guò)來(lái)的參數(shù)。
- 在靜態(tài)方法前添加注解
3鸣驱、在布局文件中使用BindAdapter類(lèi)
首先在布局文件中定義一個(gè)變量泛鸟,用于存放網(wǎng)絡(luò)圖片的地址。
<variable
name="networkImage"
type="String" />
在ImageView中通過(guò)標(biāo)簽調(diào)用靜態(tài)方法
<ImageView
android:layout_width="match_parent"
android:layout_height="300dp"
app:image="@{networkImage}"/>
4踊东、在A(yíng)ctivity中為布局變量賦值
binding.setNetworkImage("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1337486992,1705035034&fm=26&gp=0.jpg");
運(yùn)行結(jié)果如下:
image.png
在BindingAdapter中使用重載方法北滥。
比如可以定義如下的重載方法:
/**
* 顯示本地圖片
* @param imageView
* @param localImage
*/
@BindingAdapter("image")
public static void setImage(ImageView imageView,int localImage){
imageView.setImageResource(localImage);
}
在布局文件中的使用方式與上面相同刚操,都是先定義變量,然后在View中調(diào)用
<data>
<variable
name="localImage"
type="int" />
</data>
...
<ImageView
android:layout_width="match_parent"
android:layout_height="300dp"
app:image="@{localImage}"/>
在A(yíng)ctivity中傳入?yún)?shù)值
binding.setLocalImage(R.mipmap.localimage);