@Bindable
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
@Bindable
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
@Bindable({"firstName", "lastName"})
public void getName() {
return this.firstName + ' ' + this.lastName;
}
上記のコードは、Google のサンプル コードからピックアップしました - https://developer.android.com/reference/android/databinding/Bindable
そして、それをXMLのように使用します
<TextView
android:id="@+id/first_name"
.....
android:text="@{myViewModel.firstName}" />
<TextView
android:id="@+id/last_name"
.....
android:text="@{myViewModel.lastName}" />
<TextView
android:id="@+id/full_name"
.....
android:text="@{myViewModel.getName()}" />
私が電話myViewModel.setFirstName("Mohammed");
しているときはいつでも、ビューの名を更新していますが、フルネームは更新していません。ドキュメンテーションでさえバグが多く、信頼性がありません。
この問題に関連する他の投稿は、ほとんどがパラメーター化されていない Bindable を扱っているため、あまり役に立ちませんでした。
ドキュメントのこの行に従って
firstName または lastName に変更通知がある場合は常に、name もダーティと見なされます。これは、onPropertyChanged(Observable, int) が BR.name について通知されることを意味するのではなく、name を含むバインディング式がダーティになり、リフレッシュされることのみを意味します。
私も呼び出してみnotifyPropertyChanged(BR.name);
ましたが、結果にも影響しません。