所以我有用@Entity注释注释的房间模型类,其中包含用@ColumnInfo注释的字段。
我还有一个绑定到该模型对象的视图:
<EditText
android:id="@+id/sadfadsdfasd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:hint="@string/assdsa"
android:inputType="text"
android:text="@={fuelPrice.modification}" />
就像这样,它在显示EditText时起作用。它显示了我的模型的价值,但是当我修改EditText时,即使我使用@ =符号表示双向绑定,该修改也不会存储在对象中。
所以,如果我理解正确,我真的不能将POJO与简单的原始字段用于双向数据绑定,而是应该将所有字段作为可观察类型的必需类型或包含在LiveData中的字段?
如果上述情况成立,是否意味着要对房间实体进行双向绑定,我必须为每个实体创建单独的类,以实现所有可观察字段并相应地更新我的实体对象?还是有一个更简单的解决方案?
编辑 以上案例均为假。似乎两种方式的绑定确实适用于具有适当的getter和setter的简单POJO类。
答案 0 :(得分:2)
AFAIK ,它应该在没有ObservableField的情况下也可以工作,因为modification
是带有标准getter和setter的私有字段。使用
android:text="@={fueldPrice.modification}"
和
class FuelPrice {
private String modification;
public String getModification() {
return modification;
}
public String setModification(String modification) {
this.modification = modification;
}
}
如果您仅使用公共字段,它也可以工作
class FuelPrice {
public String modification;
}
答案 1 :(得分:1)
您可以按以下方式使用observableField:
public class FuelPrice {
public ObservableField<String> modification = new ObservableField<>();
public TextWatcher watcher = new TextWatcherAdapter() {
@Override public void afterTextChanged(Editable s) {
if (!Objects.equals(modification.get(), s.toString())) {
modification.set(s.toString());
}
}
};
}
并如下更新您的XML:
<EditText
android:id="@+id/sadfadsdfasd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:hint="@string/assdsa"
android:inputType="text"
android:addTextChangedListener=”@{fuelPrice.watcher}” />
参考:
。