【问题标题】:How to modify the layout expression dynamically in data binding layout?如何在数据绑定布局中动态修改布局表达式?
【发布时间】:2021-09-05 04:16:50
【问题描述】:

假设我有一个看起来像这样的数据绑定布局,

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <data>
        <variable
            name="foo"
            type="com.example.sudokugame.Foo" />
    </data>
    ...

        <TextView
            android:id="@+id/cell_1"
            style="@style/cell"
            android:text="@{foo.bar}" />
    ...
</layout>

我想扩展布局并将其添加到另一个父布局。所以,我的问题是,是否有任何修改 textview 中的布局表达式,使其看起来像这样,

...
<TextView
    android:id="@+id/cell_1"
    style="@style/cell"
    android:text="@{foo.baz}" <!-- or something else like foo.something -->
....

有可能吗?如果没有,是否有任何方法可以完全以编程方式构建数据绑定布局,甚至无需定义 XML 布局以便将其添加到另一个布局中?

【问题讨论】:

    标签: android data-binding android-databinding


    【解决方案1】:

    使用binding adapters 来实现这一点。这是你可以做的,

    @BindingAdapter("dynamicText")
    fun TextView.setDynamicText(foo: Foo) {
        text = if (<your_condition>) {
            foo.bar;
        } else {
            foo.something;
        }
    }
    

    现在将您的 xml textview 属性更改为,

    <TextView
            android:id="@+id/cell_1"
            style="@style/cell"
            android:dynamicText="@{foo}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2022-07-07
      相关资源
      最近更新 更多