@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;
}
以上代码我从谷歌的示例代码中获取 - 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 有更改通知时, name 也将被视为脏。这并不意味着 onPropertyChanged(Observable, int) 将被通知 BR.name,只是包含 name 的绑定表达式将被弄脏和刷新。
我也试过打电话notifyPropertyChanged(BR.name);
,但它也对结果没有影响。