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