1

Android の双方向データバインディングを使用する場合、 static BindingAdapters を使用する必要がありますか、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でしょうか? BindingAdapterstaticの代わりに観察可能なフィールドを使用したい理由は、私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'

誰でもこれを見て、私が間違っていることを教えてもらえますか?

4

1 に答える 1