网上看了,好几篇,关于@BindingAdapter 的用法,都是隔靴搔痒,本来一个很简单的东西结果被搞得很诡异.
其实这都是因为,DataBindingUtil;绑定工具在编译外部生成数据绑定,间接导致了问题得复杂度.其实 @BindingAdapter 一点都不复杂
不需要任何附加的工作,仅仅只需要将一个 public static [方法名] 地声明成@BindingAdapter就可以了.
例如: @BindingAdapter ("[监听数据名]")
这个函数体,放在工程任意 类中,或者单独的一个类,或者 主Activity 中,都可以直接使用无需要实例化
所以 要声明为 public static 就是这个原因.
@BindingAdapter("imgSrc")
public static void setText2(ImageView mimageView, String imageUrl) {
....任意处理代码,
}
直接以 ("[监听数据名]" 在Xml 布局中对应一个自定义属性和那么这个静态函数挂钩绑定.就成功了.
从左到右: 第一个参数,是绑定的控件本身,
从第二个参数开始都是可传递来的自定义参数,
//在主程序 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
}
被启动执行
//片段 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个积分币,是网址系统设置的.不是我设置的.