绑定适配器
是什么
dataBinding 提供了 BindingAdapter 这个注解用于支持自定义属性,或者是修改原有属性。注解值可以是已有的 xml 属性,例如 android:src、android:text等,也可以自定义属性然后在 xml 中使用
例如,对于一个 ImageView ,我们希望在某个变量值发生变化时,可以动态改变显示的图片,此时就可以通过 BindingAdapter 来实现
怎么用
需要先定义一个静态方法,为之添加 BindingAdapter 注解,注解值是为 ImageView 控件自定义的属性名,而该静态方法的两个参数可以这样来理解:当 ImageView 控件的 url 属性值发生变化时,dataBinding 就会将 ImageView 实例以及新的 url 值传递给 loadImage() 方法,从而可以在此动态改变 ImageView 的相关属性
单参数
<ImageView
android:id="@+id/glideIv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:loadImg="@{urlPath}" />
class MBindingAdapter {
companion object{
@JvmStatic
@BindingAdapter("loadImg")
fun loadImage(imageView: ImageView, url: String?) {
Glide.with(imageView.getContext())
.load(url)
.into(imageView)
}
}
}
注意
1.需要放在静态方法里
2.kotlin需要加@JvmStatic 否则报错
多参数
class MBindingAdapter {
companion object{
@JvmStatic
@BindingAdapter("loadImg","imgSize")
fun loadImage(imageView: ImageView, url: String?,size:Float) {
println("size--->$size")
Glide.with(imageView.getContext())
.load(url)
.into(imageView)
}
}
}
<ImageView
android:id="@+id/glideIv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:loadImg="@{urlPath}"
app:imgSize="@{imgSize}"/>





网友评论