我正在使用Android的数据绑定库。我的数据对象扩展为BaseObservable
。
public static class SimpleData extends BaseObservable implements Serializable {
private String text, subText;
private SpannableString totalText;
@Bindable
public SpannableString getTotalText() {
return totalText;
}
public void setTotalText(SpannableString totalText) {
this.totalText = totalText;
notifyPropertyChanged(BR.totalText);
}
}
我的xml也绑定了
<TextView
android:id="@+id/patient_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginLeft="16dp"
android:layout_toRightOf="@+id/patient_image"
android:textColor="@color/primary_text"
android:text="@{object.getTotalText()}"
/>
绑定发生在初始值上。但是当我使用
更改值时object.setTotalText(someSpannableString);
更改未反映在文本视图中。可能是什么问题?
答案 0 :(得分:7)
使用字段名称而不是getter。
<TextView
android:id="@+id/patient_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginLeft="16dp"
android:layout_toRightOf="@+id/patient_image"
android:textColor="@color/primary_text"
android:text="@{object.totalText}"/>
答案 1 :(得分:1)
我遇到了同样的问题。我的绑定将在第一次工作,然后第二次不能工作。
我有一个与你相同的设置,除了我把@Bindable
放在我的setter上而不是我的getter方法。
向我的setter和getter添加@Bindable
为我解决了这个问题。
当我调试数据绑定库的内部工作者时 注意到没有调用一个名为request re-bind的方法 因为它执行了检查字段是否已更新的操作 从最后一个值。我猜你需要两个注释 方法,以便它可以做这个内部确认来检查它是否 需要重新绑定。
如果这是真的,我不是100%,但是对两种方法都有注释解决了我的问题。查看Data Binding库文档,我注意到它们只是在getter上显示注释。
您可以尝试:
@Bindable
public SpannableString getTotalText() {
return totalText;
}
@Bindable
public void setTotalText(SpannableString totalText) {
this.totalText = totalText;
notifyPropertyChanged(BR.totalText);
}
看看它是否解决了它。
答案 2 :(得分:0)
我认为您应该将String值定义为public而不是private。 另外,dataBinding会自动检测getter和setter,因此只需输入“ @ {object.totalText}”即可。
我希望这个Youtube链接也会对您有所帮助。
答案 3 :(得分:0)
使用“ notifyChange()”代替“ notifyPropertyChanged(BR ._)” ..!
答案 4 :(得分:0)
需要为2way数据绑定添加=
**android:text="@={LoginViewModel.address}"**
I forgot to add = so its not work
If you are using Edit text then want 2 way data binding by base BaseObservable then
需要@ = {LoginViewModel.address}而不是“ @ {LoginViewModel.address}”