使用 Android 双向数据绑定时,我是否必须在上使用 staticBindingAdapter
或者View
是否可以简单地使用可观察的实例字段?在文档中,我总是只在ViewModel
s 上看到可观察字段,而不是在View
. 我尝试在我View
的 with上实现可观察字段
var myValue: String = ""
@Bindable get(): String {
return field
}
set(value: String) {
field=value
setText(value)
notifyPropertyChanged(BR.myValue) // my View implements the Observable interface
}
但是当我编译这个(./gradlew assembleDebug --stacktrace
获取详细信息)时,它失败了
ERROR: Cannot find a getter for <com.example.test.MyAutoCompleteTextView app:myValue>
that accepts parameter type 'java.lang.String'
If a binding adapter provides the getter, check that the adapter is annotated correctly
and that the parameter type matches.
那么,是否可以View
像在双向数据绑定上那样使用可观察字段ViewModel
?我想使用可观察字段而不是 staticBindingAdapter
的原因是我View
有一些比我可以处理的更复杂的逻辑/状态BindingAdapter
(好吧,从静态BindingAdapter
我可以调用到myViewInstance.myValue
,但不知何故我感觉不对)
更新
我构建了一个最小(非)工作示例,可在 Github 上找到 。默认情况下,它使用单向绑定,效果很好。改变
app:myValue="@{viewModel.realValue}"
至
app:myValue="@={viewModel.realValue}"
inactivity_main.xml
将导致信息量不大的编译错误。用于./gradlew assembleDebug --stacktrace
获得长输出,其中包括
ERROR: Cannot find a getter for
<com.example.test.MyAutoCompleteTextView app:myValue>
that accepts parameter type 'java.lang.String'
谁能看看这个,让我知道我做错了什么?