在 EditText 中使用与托管 RealmObject 的双向数据绑定

Using two-way data binding with managed RealmObject in EditText

背景: 我正在使用 io.realm:android-adapters:2.0.0 来显示项目列表。每行包含三个 TextViews 和两个 EditText 字段。这三个 TextViews 文本是根据 realm 架构设置的。我正在为 EditText 使用两种方式的数据绑定,例如:

<EditText
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:inputType="number"
 android:text="@={Conversion.toString(offline.inputUI)}" />

offline 是使用两个 @Ignore 字段扩展 RealmObject 的模式,这两个 @Ignore 字段对应于两个 EditText。当用户键入时,Vales 反映在 offline 模型中。

问题: 当我滚动屏幕时 EditText 值丢失。如果屏幕上一次显示四行并且用户输入 EditText 并滚动到接下来的四行,如果重新访问前四行,所有 EditText 的值都将丢失。这是因为零拷贝设计,我理解。但是,如果我从 EditText 中删除 @Ignore,则会抛出一个异常,您无法在外部执行事务……等

期望的输出如何避免EditText的值在滚动时消失并利用领域零复制设计 .此外,在用户输入时或在用户离开 EditText 后实时将 EditText 的值保存在领域中。 真的可以吗? .我需要改变我目前的做法吗?如果我在焦点从 EditText 更改时频繁使用写入事务,它会耗尽电池吗?

如果你想利用 Realms 零拷贝架构,唯一的解决办法是持久化你想要保存的所有数据,但是现在不自动支持自动事务的双向数据绑定。

如果您将事务添加到数据绑定使用的所有设置器,您就可以让它工作。但根据您保存数据的频率,它仍然可能导致您的 UI.

出现卡顿

这是我们正在思考的问题,但短期内我们无法提供任何解决方案。

恐怕,无论如何,都没有"easy"选择。

请注意,电池耗尽不是问题,但您会非常频繁地写入磁盘。