Android与房间表模型的双向数据绑定(bind)

标签 android android-room android-databinding android-architecture-components

所以我有使用@Entity 注释进行注释的房间模型类,其中包含使用@ColumnInfo 进行注释的字段。

我还有一个 View 绑定(bind)到这个模型的对象:

   <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 时,即使我使用 @= 符号指示双向绑定(bind),该修改也没有存储在我的对象中。

因此,如果我理解正确的话,我真的不能将 POJO 与简单的原始字段一起用于双向数据绑定(bind),而是我应该将所有字段作为所需类型的可观察对象或包含在 LiveData 中的字段?

如果上述情况成立,是否意味着要对房间实体进行两种方式绑定(bind),我必须为每个实体创建单独的类,以实现所有可观察字段并相应地更新我的实体对象?或者有更简单的解决方案吗?

编辑 以上案例为假。似乎双向绑定(bind)确实适用于具有适当的 getter 和 setter 的简单 POJO 类。

最佳答案

AFAIK 我刚刚测试了它,它应该在没有 ObservableField 的情况下工作,因为 modification 是一个具有标准 getter 和 setter 的私有(private)字段。使用

android:text="@={fueldPrice.modification}"

class FuelPrice {
    private String modification;

    public String getModification() {
        return modification;
    }

    public String setModification(String modification) {
        this.modification = modification;
    }
}

如果您只使用公共(public)字段,它也有效

class FuelPrice {
    public String modification;
}

关于Android与房间表模型的双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53078127/

相关文章:

当子元素展开/折叠时,Android RecyclerView 滚动到顶部

android - 无法为项目启用 DataBinging

java - 从 Linkedin 得到空白回复

Android 房间数据库迁移运行多次

android - Room allowMainThreadQueries 与 Kotlin 协程

android - Kotlin:如何将对象列表插入到 Room 中?

android - 如何将数据绑定(bind)与 ProgressBar 结合使用?

android - 带有 Activity 和 fragment 的自定义抽屉导航

java - Asynctask 未知类型执行

Android,获取经纬度(wifi)和设备ID