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

时间:2017-06-30 08:27:29

标签: android android-edittext android-recyclerview realm realm-java

后台:我正在使用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是扩展RealmObject的架构,其中两个@Ignore字段对应于两个EditText。当用户输入时,Vales会反映在offline模型中。

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

所需的输出如何避免EditText的值在滚动时消失并利用领域零拷贝设计的好处。此外,将EditText的值实时保存为用户类型或用户离开EditText后的值。 真的可能吗?。我是否需要改变目前的做法?如果我从EditText更改焦点时使用频繁的写入事务,是否会耗尽电池?

1 个答案:

答案 0 :(得分:0)

如果您想利用Realms零拷贝架构,唯一的解决方案是保留您想要保存的所有数据,但目前不支持自动事务的双向数据绑定。

如果您将事务添加到数据绑定使用的所有setter,则可以使其工作。但是,根据您保存数据的频率,它仍然可能导致将jank引入您的UI。

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

我害怕,无论如何,没有任何&#34; easy&#34;选择。

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