使用BaseAdapter对不可直接绑定的组件绑定数据
以ImageView为例,显示图片时需要使用到glide,因此可以定义一个类,用@BindingAdapter来注解用于处理图片的方法:
public class IVBindingAdapter {
@BindingAdapter("image")
public static void setImage(ImageView imageView,String url){
if (!TextUtils.isEmpty(url)){
Glide.with(imageView)
.load(url)
.into(imageView);
}
}
}
@BindingAdapter括号内的字符串即是在ImageView组件中需要使用的属性(用法类似include传参),例如此时括号内定义的value是”image”,那么在ImageView中需要传入image属性:
<ImageView
android:id="@+id/imageView"
app:image="@{networkImage}" />
由于value可以传入一个数组
因此可以传入多个参数,并通过requireAll来配置是否需要全部传入:
public class IVBindingAdapter {
@BindingAdapter(value = {"image","default_image"},requireAll = false)
public static void setImage(ImageView imageView,String url,int res){
if (!TextUtils.isEmpty(url)){
Glide.with(imageView)
.load(url)
.placeholder(R.drawable.ic_launcher_background)
.into(imageView);
}else {
Glide.with(imageView)
.load(res)
.placeholder(R.drawable.ic_launcher_background)
.into(imageView); }
}
}
在xml中也需要传入这两个参数:
<ImageView
android:id="@+id/imageView"
app:image="@{networkImage}"
app:default_image="@{localImage}" />