【问题标题】:How to override a button attribute如何覆盖按钮属性
【发布时间】:2016-01-30 04:37:24
【问题描述】:

我应该能够在 Android dataBinding 中使用@BindingAdapter,以便我可以覆盖某个属性。我可以使用自定义属性来做到这一点,但是使用 android 内置属性它是如何完成的?

到目前为止我所拥有的: 在我的 viewModel 中,我有一个用 @BindingAdapter 注释的方法,如下所示:

 @BindingAdapter({"android:text"})
    public static void setText(Button view,boolean language) {//i need to pass one more variable in here for area code , its just a integer, but how ?

        if("french".equals(language))//i want to test if french && area code
           view.setText("si vous play");
   else if ("English".equals(language)) //i want to test if french && area code
        view.setText("please");

    }

但我有一些问题。让我们看看xml:

 <Button
        android:id="@+id/mybutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`french,844`}"/>

查看我的问题,我想将多个参数传递给 dataBinding。但是如何?我必须制作一个 POJO 对象并将其传入吗?即使我这样做了,我如何从 xml 设置对象?

所以如果有人能告诉我以下我会很好: 1. 如何将多个值传递给 bindingAdapter 和 2. 如何在任何视图中覆盖一个内置的android属性。

【问题讨论】:

  • 顺便说一句,“请”是“s'il vous plait”而不是“si vous play”:)

标签: android xml data-binding


【解决方案1】:

如果你想在你的 BindingAdapter 中设置两个不同的值,你应该使用两个不同的属性:

<Button
    android:id="@+id/mybutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{`french`}"
    app:areaCode="@{`844`}"/>

然后在您的 BindingAdapter 中有两个不同的属性:

@BindingAdapter({"android:text", "areaCode"})
public static void setText(Button view, String language, String areaCode) {
    ...
}

但设置不同的“app:language”可能会更好,因为这对开发人员来说更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2015-01-08
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2016-11-13
    相关资源
    最近更新 更多