Android:如何在UI中保持realmlist的更新

Android:如何在UI中保持realmlist的更新,android,realm,Android,Realm,我有一个显示学生名单的回收视图。 所有学生都保存在适配器中的realmlist中 当用户可以请求数据刷新时,服务器会将学生列表发送回用户。 我现在要做的是从服务器下载所有信息,将其存储在数据库中,然后从数据库中检索(通过realmresults)并将realmresult转换为realmlist 我的问题是如何正确地更新UI? 我在文档中看到realmlist有一个管理模式,在该模式下,他们会自动更新ui。。 这种管理模式是什么?这意味着什么? 如何使用realmlist将其保持在托管状态? 使

我有一个显示学生名单的回收视图。 所有学生都保存在适配器中的realmlist中

当用户可以请求数据刷新时,服务器会将学生列表发送回用户。 我现在要做的是从服务器下载所有信息,将其存储在数据库中,然后从数据库中检索(通过realmresults)并将realmresult转换为realmlist

我的问题是如何正确地更新UI? 我在文档中看到realmlist有一个管理模式,在该模式下,他们会自动更新ui。。 这种管理模式是什么?这意味着什么? 如何使用realmlist将其保持在托管状态? 使用realmlists的正确方法(也称为最佳实践)是什么


请注意,我无法将我的信息直接保存为realmresult,因为我正在对不希望保存的数据执行某些操作。

托管对象与独立对象的比较

独立的
RealmObject
/
RealmList
是通过对象的构造函数或
Realm.copyFromRealm()
方法创建的。独立对象中的数据访问不会通过下划线存储引擎,相反,它的行为与普通对象一样因此,当数据更改时,独立对象不会被刷新。独立对象的示例:

MyModel myModel = new MyModel(); // Standalone

MyModel model = realm.where(MyModel.class).findFirst(); // This is managed object.
MyModel standaloneModel = realm.copyFromRealm(model); // The returned value is standalone object.

MyList myList = new MyList(); // Standalone
托管的
RealmObject
/
RealmList
正在通过Realm的底层存储引擎访问数据。它们是在您从领域进行查询或从
copyToRealm()
(及其变体方法)返回时创建的。比如:

如何正确更新UI

建议使用Realm的更改侦听器。看

使用
RealmList
的正确方法(又称最佳实践)是什么?

这有点令人困惑,但Realm正在将
RealmCollection
引入下一个主要版本(
v0.89.0
)。看

请注意,我不能将我的信息直接保存为realmresult,因为我正在对数据执行一些操作,而我不希望保存这些数据

如果
RealmList
处于管理模式,数据更改也将保存。如果不想保存某些数据,可以考虑在这些字段上使用<代码> @忽略>代码>注释。看


更新日期:04072016

RealmList
vs.
RealmResults

RealmList
是保存为
RealmObject
字段的
RealmObject的列表。它代表领域中的一对多关系

RealmResults
是查询的结果

当数据发生更改时,这两个选项(如果在托管模式下
RealmList
)都将自动刷新

您可以通过以下方式从
RealmList
获取
RealmResults



这个答案在Realm
v0.89.0
发布后会有点过时,因为有新的。

嘿!谢谢你的回答!你能告诉我realmlist和realmresults的区别吗?如果两者都可能更改基础数据,那么为什么要使用realmlist?我的意思是,如果我理解正确,realmresults总是刷新我的UI,那么我为什么要使用它们呢?realmresults和realmlist之间有什么区别?我们什么时候应该使用每一个?再次感谢您的回答:)我决定现在我最好的选择是使用realmlist,因为我经常使用添加和删除方法,这是realmresults不可能的,我希望realmcollections也会有这种方法。它使我们能够灵活地同时保存不同的列表,并在不将其保存到数据库的情况下向列表中添加新信息。此外,我们不能使用realmresults,因为一旦调用remove/clear,它会从数据库中删除对象,向列表中添加对象的唯一方法是将对象真正保存到数据库中,realmcollection是否支持在不强制我们从数据库中保存/删除对象的情况下从中添加/删除对象?现在,如果我想从服务器获取新项目并使用realmresults,我需要将它们保存到数据库中,重新查询以获得结果,用新列表更新recycleradapter,这迫使他重新加载列表并重置列表项,如果我只想在列表中添加一些项,所有这些似乎都有很多工作要做。。或者我做错了什么?“重新查询以获得结果”,不必重新查询,结果将在数据库更改时更新,除非您想更改查询条件。只需注册一个侦听器,刷新视图。看见
MyModel model = realm.where(MyModel.class).findFirst();

MyModel model = new MyModel(); // This is a standalone object.
model = realm.copyToRealm(modle); // The returned value is managed by Realm now.

MyList myList = realm.where(MyModel.class).findFirst().getMyList();
RealmResults results = myRealmList.where().findAll();