在 Android 数据绑定布局中引用 Observable class 的属性
Referencing properties of Observable class in Android Data Binding layout
Observable
class 属性 的类型是什么 getter 在 Android 数据绑定框架中被注释为 @Bindable
?
例如让Observable
class定义如下:
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<String, String>"
可以编译,但是 TextView
在翻译 属性 更改时不会更新。
我可以通过在布局 XML 中引入 localization
变量然后在绑定表达式中调用 localization.translation.invoke()
来实现所需的行为。我对此不太满意,想知道我是否可以直接引用 translation
。
Localization
扩展了 BaseObservable
而 Function1
根本无法观察到。因此,使用 Localization
为您提供了一个用于观察属性更改的界面。
如果您绑定 translation
,这是一个简单的设置字段。如果你想更新它,你必须再次调用 setTranslation()
。
Observable
class 属性 的类型是什么 getter 在 Android 数据绑定框架中被注释为 @Bindable
?
例如让Observable
class定义如下:
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<String, String>"
可以编译,但是 TextView
在翻译 属性 更改时不会更新。
我可以通过在布局 XML 中引入 localization
变量然后在绑定表达式中调用 localization.translation.invoke()
来实现所需的行为。我对此不太满意,想知道我是否可以直接引用 translation
。
Localization
扩展了 BaseObservable
而 Function1
根本无法观察到。因此,使用 Localization
为您提供了一个用于观察属性更改的界面。
如果您绑定 translation
,这是一个简单的设置字段。如果你想更新它,你必须再次调用 setTranslation()
。