@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");
, он обновляет первое имя в поле зрения, но не полное имя. Даже документация глючная и ненадежная.
Другие сообщения, связанные с этой проблемой, не могут помочь, так как большинство из них имеют дело с непараметризованными Bindables.
Согласно этой строке в документе
Всякий раз, когда либо имя, либо фамилия имеют уведомление об изменении, имя также будет считаться грязным. Это не означает, что onPropertyChanged(Observable, int) будет уведомлено для BR.name, только то, что выражения привязки, содержащие имя, будут испорчены и обновлены.
Я также пытался вызвать notifyPropertyChanged(BR.name);
, но это также не повлияло на результат.