android BindingAdapter方法放在哪里?

cha*_*ser 31 android 2-way-object-databinding android-databinding

这必须是最基本的问题,但经过一整天的阅读教程和文档后,我似乎无法理解在哪里放这些方法.没有一个指南提到放置这个东西的地方,只是提到在静态方法上使用注释.什么静态方法?任何静态方法都可以,无论什么类?什么是好习惯?创建一个CustomBinding类来托管所有这些静态方法?

只要我有方法有一个BindingAdapter注释,第一个参数是一个View,它会起作用吗?

我假设如果第一个参数是View类型我可以将绑定属性放在任何类型的视图上,它会触发方法吗?因此,如果我有特定的视图说EditText,这是否意味着只有在布局文件的EditText视图中找到属性时才调用该方法?

cha*_*ser 24

在浏览互联网后,我终于找到了一些开发人员自己的信息.我希望他们能够更清楚地了解文档中的基础知识.

Quote:

绑定适配器是用于执行此操作的任何类中的带注释的方法.通常,您可以根据目标View类型将适配器组织到[-a]类中.

这显然意味着在编译时,任何具有注释BindingAdapter的类中的所有方法都将生成BindingAdapter.


Man*_*nza 5

你把它放在你的模型类中。

例子:

XML:

 <data>

    <variable
        name="item"
        type="com.yourpackage.Model"/>
      </data>
         ......

           <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@{item.resId}"/>
Run Code Online (Sandbox Code Playgroud)

模型:

public class Model {

    @DrawableRes
    private final int resId;

    public Model(int resId) {
        this.resId = resId;
    }

    public int getResId() {
        return resId;
    }

    @BindingAdapter ("android:src")
    public static void setImageResource(ImageView imageView, int resource){
        imageView.setImageResource(resource);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不认为模型类不是放​​置这个 BindingAdapter 的好地方,因为它并不意味着与模型耦合。例如,我不能做两个 `@BindingAdapter ("android:src")` - 一个将图像缩放到 200x200,另一个将图像缩放到 400x400。我认为将它们放在一个专门用于绑定的类中可能会更好(例如`BindingAdapterUtils`)。 (8认同)