Android数据绑定框架中getter被注释为@Bindable
的{{1}}类属性的类型是什么?
例如,让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>
问题是,在type
&#34;翻译&#34;的variable
属性中放入什么。
我试过了:
type="kotlin.jvm.functions.Function1<String, String>"
它会编译,但翻译属性更改时TextView
不会更新。
我可以通过在布局XML中引入localization
变量然后在绑定表达式中调用localization.translation.invoke()
来实现所需的行为。我对此并不满意,想知道我是否可以直接引用translation
。
答案 0 :(得分:1)
Localization
延伸BaseObservable
而Function1
根本无法观察到。因此,使用Localization
为您提供了一个用于观察属性更改的界面。
如果绑定translation
,则它是一个设置的简单字段。如果您想要更新它,则必须再次致电setTranslation()
。