DataBinding中@BindingAdapter注解的用法。
初步理解,可以认为这一个注解就是生成一个全局的控件属性。这一个注解面向一个public static方法,方法名自己定义。它注解的方法的第一个形参就是我们想要对其创建属性的控件类,第二个形参是赋给这一个自定义属性的值。
被注解的属性是面向项目全局的。而Adapter可以理解为手机充电器,比如输入220V交流电,通过一系列转换,输出5V直流电。同样的,这个注解对应的方法中,传入控件和属性值,我们通过自己的需要实现数据和控件的之间转化操作。
下面,为一个ImageView创建一个自定义控件属性vendorImageUrl,传入一个Strgin类型的URL,把URL对应的网络图片加载到ImageView控件中。

这一个静态方法中,我们使用Picasso框架把URL对应的网络图片加载到ImageView控件中(也可以根据自己的需求,实现根据属性值对控件的处理)。
定义好属性如何用?如下图。

我们直接对ImageView控件设定这个属性(用app命名空间),把viewModel中的URL值赋予给这一个属性。随后DataBinding组件就会调用我们刚才定义的方法,实现我们想要的自定义属性操作。
很明显,为实现自定义属性的编译和生成,它对应的处理方法应该为静态代码段,修饰符为public static。
DataBinding的@BindingAdapter也支持同时指定多个属性。默认来说,当指定多个属性时,这些属性要同时地使用到同一个控件上,有点像控件中强制要求设定属性layout_width和layout_height一样,否则的话会报错。我们也可以通过设置requireAll的值来指定是否强制所有的属性同时使用。如下。


网友评论