Android の双方向データバインディングを使用する場合、 static BindingAdapter
s を使用する必要がありますか、View
または監視可能なインスタンスフィールドを単に使用することは何とか可能ですか? ドキュメントでは、監視可能なフィールドは常にViewModel
ではなく でのみ表示され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
でしょうか? BindingAdapter
staticの代わりに観察可能なフィールドを使用したい理由は、私View
が で処理できるよりも複雑なロジック/状態があるためですBindingAdapter
(まあ、 static から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'
誰でもこれを見て、私が間違っていることを教えてもらえますか?