让我们来说清楚 @BindingAdapter 是怎么个用.不废话手册.

网上看了,好几篇,关于@BindingAdapter 的用法,都是隔靴搔痒,本来一个很简单的东西结果被搞得很诡异.

其实这都是因为,DataBindingUtil;绑定工具在编译外部生成数据绑定,间接导致了问题得复杂度.其实 @BindingAdapter 一点都不复杂

  • 首先@BindingAdapter 是对绑定数据的触发器的监听器(适配器或者是一个便捷通道),
  • 通过它你只要改变绑定的数据,这个适配器就被触发.它的函数体就会启动执行,
    首先谈谈如何布置

不需要任何附加的工作,仅仅只需要将一个 public static [方法名] 地声明成@BindingAdapter就可以了.

例如: @BindingAdapter ("[监听数据名]")

这个函数体,放在工程任意 类中,或者单独的一个类,或者 主Activity 中,都可以直接使用无需要实例化

所以 要声明为 public static 就是这个原因.

@BindingAdapter("imgSrc")
    public static void setText2(ImageView mimageView, String imageUrl) {
    ....任意处理代码, 
    }
  • 特别要强调的是 @BindingAdapter 无须声明,无须实例化,所以你写好这个函数带有 @BindingAdapter ("[监听数据名]"),
  • 之所以要强调就是要和 数据 模块的使用如方式分开,把一个本来很简单的东西搞复杂.

直接以 ("[监听数据名]" 在Xml 布局中对应一个自定义属性和那么这个静态函数挂钩绑定.就成功了.

  • 下面分析一下型如: setText2 这个public static 函数的参数.意义

从左到右: 第一个参数,是绑定的控件本身,
从第二个参数开始都是可传递来的自定义参数,

  • 简单的说自定义的参数在,xml 文件中被布局,的那个控件中,
  • 和你定义的自定义属性对应.形如 app:imgSrc= “@{imgurl}”
  • imgSrc 是自定义的属性标记, imgurl 是被绑定的数据.也就是第二个参数.
//在主程序  Activity 中,对 imgurl 是被绑定的数据,进行赋值.
 String imageUrl="https://www.baidu.com/img/bd_logo1.png";
 imageActivityBinding.setImgurl(imageUrl);

XML 布局中

 

第二步将一个对应的 [监听数据名] 和 , 在 Xml 文件中生命的 和绑定数据 {绑定数据名} 在xml中自定义属性中配置在一起

代码中给布局 Xml 中的自定义数据(参数) 赋值.这个动作.就启动了
@BindingAdapter(“imgSrc”)的 绑定函数




            

imgSrc 是 @BindingAdapter(“imgSrc”) 中的那个参数.
也是控件中自定义的属性,

app:imgSrc= "@{imgurl}"

读作: imgSrc 属性的(适配器)处理监听函数.有个参数是 imgurl(也就第二个参数.而且类型要匹配)
而这个参数又在 主程序 Activity 中被,使用(赋值),所以设置之前是没有数据的.
只是绑定好了还需要使用 imageActivityBinding.setImgurl(imageUrl);

 String imageUrl="https://www.baidu.com/img/bd_logo1.png";
        imageActivityBinding.setImgurl(imageUrl);

于是

@BindingAdapter("imgSrc")
public static void setText2(ImageView mimageView, String imageUrl) {`
    程序片段  A
}

被启动执行

  • 下面是利用传递的值更改ImageView 控件显示的图片

//片段 A   是 setText2的函数体,更新一个 百度的 log 图片

RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.ic_launcher_round)
                .error(R.mipmap.ic_launcher)
                .priority(Priority.HIGH)
                .diskCacheStrategy(DiskCacheStrategy.NONE);

        //   Glide.with(mimageView).load(imageUrl).apply(options)  .into(mimageView);

        Glide.with(mimageView.getContext()).applyDefaultRequestOptions(options).
                load(imageUrl).transition(new DrawableTransitionOptions().crossFade(1000)).into(mimageView);
  
  • 下面公布源码.

下载地址 https://download.csdn.net/download/weixin_39306574/11013245

那 5个积分币,是网址系统设置的.不是我设置的.

你可能感兴趣的:(让我们来说清楚 @BindingAdapter 是怎么个用.不废话手册.)