【问题标题】:Where to place android BindingAdapter method?在哪里放置android BindingAdapter 方法?
【发布时间】:2017-04-12 06:17:00
【问题描述】:

这必须是最基本的问题,但经过一整天的阅读教程和文档here,我似乎无法理解将这些方法放在哪里。没有任何指南提到这个东西的放置位置,它只是提到在静态方法上使用注释。什么静态方法?任何静态方法都不管类吗?什么是好的做法?我应该创建一个 CustomBinding 类来承载所有这些静态方法吗?

只要我的方法有一个BindingAdapter注解并且第一个参数是一个View,它就可以工作?

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

【问题讨论】:

标签: android android-databinding 2-way-object-databinding


【解决方案1】:

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

例子:

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}"/>

型号:

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);
    }
}

【讨论】:

  • 请解释这是唯一的方法还是你的方法?有一些 BindingAdapter 分组在一个类中,例如android.googlesource.com/platform/frameworks/data-binding/+/…
  • 我不认为模型类不是放​​置这个 BindingAdapter 的好地方,因为它并不意味着与模型耦合。例如,我不能做两个@BindingAdapter ("android:src") - 一个将图像缩放到 200x200,另一个将图像缩放到 400x400。我认为将它们放在专门用于绑定的类中可能会更好(例如BindingAdapterUtils)。
  • @Sam 您在使用没有自定义视图的绑定适配器时有什么想法吗?我试图把它带到其他文件,但不知道如何把它放在标签中
  • @TruongHieu,您不需要自定义视图。你可以用它做任何事情。只需创建一个新文件(例如 BindingUtils)并在其中放置一个静态方法。记得声明@BindingAdapter(例如@BindingAdapter ("android:src"))。
【解决方案2】:

浏览互联网后,我终于从其中一位开发人员那里找到了一些信息。我希望他们能更清楚地了解文档中的基础知识。

Quote:

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

这显然意味着在编译时,任何带有注解 BindingAdapter 的类中的所有方法都会生成 BindingAdapter。

【讨论】:

猜你喜欢
  • 2010-12-10
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多