#android #data-binding #android-databinding
Вопрос:
Допустим, у меня есть макет привязки данных, который выглядит примерно так,
<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, чтобы его можно было добавить в другой макет?
Ответ №1:
Для этого используйте адаптеры привязки. Вот как вы можете это сделать,
@BindingAdapter("dynamicText")
fun TextView.setDynamicText(foo: Foo) {
text = if (<your_condition>) {
foo.bar;
} else {
foo.something;
}
}
Теперь измените свое textview
свойство xml на,
<TextView
android:id="@ id/cell_1"
style="@style/cell"
android:dynamicText="@{foo}" />