Databinding使用篇四

2021-01-03  本文已影响0人  Method

绑定适配器

是什么

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}"/>
上一篇 下一篇

猜你喜欢

热点阅读