@BindingAdapter 注解
databinding中自定义属性依赖于注解 @BindingAdapter
作用于方法(和类无关,这个自定义属性的方法可以写在任何地方)
它定义了xml的属性赋值的java实现(注解的方法中就是我们对这个控件进行处理)
方法必须为公共静(public static)方法,可以有一到多个参数。
简单实用
直接上代码
//“app:imgUrl” 这就是在xml中的属性
@android.databinding.BindingAdapter("app:imgUrl")
public static void setImgUrl(ImageView imageView, String url) {
GlideApp.with(imageView)
.load(url)
.into(imageView);
}
xml 中使用
<ImageView
android:id="@+id/img_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
app:imgUrl="@{user.url}"
/>
多参数使用
继续上代码
@android.databinding.BindingAdapter(value = {"app:imgUrl", "app:placeholder"}, requireAll = false)
public static void loadImg(ImageView imageView, String url, Drawable placeholder) {
GlideApp.with(imageView)
.load(url)
.placeholder(placeholder)
.into(imageView);
}
xml中代码
<ImageView
android:id="@+id/img_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
app:imgUrl="@{user.url}"
app:placeholder="@{@drawable/ic_launcher_background}"
/>
这里 requireAll = false 表示我们可以使用这两个两个属性中的任一个或同时使用,如果requireAll = true 则两个属性必须同时使用,不然报错。默认为 true。
xml 中@{@drawable/ic_launcher_background} 引用的是资源文件中的图片
使用属性旧值
@BindingAdapter 自定义属性可以使用属性旧值,即上一次设置的属性值
上代码
@android.databinding.BindingAdapter(value = {"app:imgUrl", "app:placeholder"}, requireAll = false)
public static void loadImg(ImageView imageView, String oldUrl, Drawable oldError, String newUrl, Drawable newError) {
GlideApp.with(imageView)
.load(newUrl)
.placeholder(oldError)
.into(imageView);
}
这里要注意一点:如果是多个属性,那么方法的参数必须要把所有的属性的旧值列举出来,然后在列举属性新值。这个顺序是不能乱的。并不是一个属性旧值跟一个属性新值。
本文介绍了Android DataBinding中如何通过@BindingAdapter注解来实现自定义属性绑定。这种绑定允许开发者在XML中定义属性,并在Java中提供对应的处理逻辑。方法需为公共静态,可以接受一到多个参数。示例代码展示了单参数、多参数的使用方式,以及如何处理资源文件中的图片。此外,还解释了如何在自定义属性中使用旧值,并强调了参数顺序的重要性。
5424

被折叠的 条评论
为什么被折叠?



