在 Android 数据绑定布局中引用 Observable class 的属性

Referencing properties of Observable class in Android Data Binding layout

Observable class 属性 的类型是什么 getter 在 Android 数据绑定框架中被注释为 @Bindable

例如让Observableclass定义如下:

class Localization() : BaseObservable() {

    var translation: (key: String) -> String by Delegates.observable(defaultTranslation) { _, _, _ ->
        notifyPropertyChanged(BR.translation)
    }
        @Bindable get
}

布局 XML 将是这样的:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="translation"
            type="WHAT IS THE TYPE OF TRANSLATION?" />

    </data>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{translation.invoke(stringKey)}" />

    </FrameLayout>
</layout>

问题是,variable "translation".

type属性中要放什么

我试过:

type="kotlin.jvm.functions.Function1&lt;String, String&gt;"

可以编译,但是 TextView 在翻译 属性 更改时不会更新。

我可以通过在布局 XML 中引入 localization 变量然后在绑定表达式中调用 localization.translation.invoke() 来实现所需的行为。我对此不太满意,想知道我是否可以直接引用 translation

Localization 扩展了 BaseObservableFunction1 根本无法观察到。因此,使用 Localization 为您提供了一个用于观察属性更改的界面。

如果您绑定 translation,这是一个简单的设置字段。如果你想更新它,你必须再次调用 setTranslation()