引用 Android 数据绑定布局中可观察类的属性



Android数据绑定框架中,getter被注释为@BindableObservable类属性的类型是什么?

例如,让 Observable 类定义如下:

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"翻译"的type属性中放什么。

我试过:

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

它会编译,但当翻译属性更改时,TextView不会更新。

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

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

如果绑定translation,则设置的字段很简单。如果要更新它,则必须再次拨打setTranslation()

最新更新