Android:如何在UI中更新realmlist

时间:2016-04-05 19:32:08

标签: android realm

我有一个回收者视图,显示了学生列表。 所有的学生都被放在适配器的真实主义者中。

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

我的问题是如何正确更新用户界面? 我在文档中看到,realmlist有一个托管模式,他们自动更新ui .. 这个托管模式是什么?这是什么意思? 如何使用realmlist将其保持在托管状态? 使用真实主义者的正确方法(又称最佳实践)是什么?

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

1 个答案:

答案 0 :(得分:4)

托管对象与独立版

独立RealmObject / RealmList是通过Object的构造函数或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的底层存储引擎访问数据。它们是在您从Realm进行查询或从copyToRealm()(及其变体方法)返回时创建的。像:

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();

如何正确更新用户界面

建议使用Realm的更改侦听器。见https://realm.io/docs/java/latest/#notifications

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

这有点令人困惑,但Realm正在将RealmCollection引入下一个主要版本(v0.89.0)。请参阅https://github.com/realm/realm-java/pull/2345

  

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

如果RealmList处于托管模式,则也会保存数据更改。如果您不想保存某些数据,可以考虑在这些字段上使用@Ignore注释。见https://realm.io/docs/java/latest/#ignoring-properties

04072016更新

RealmListRealmResults

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

RealmResults是查询的结果。

当数据发生变化时,它们(在托管模式下如果RealmList)都会自动刷新。

您可以从RealmResults RealmList.where()获得RealmList,如:

RealmResults results = myRealmList.where().findAll();

由于新的RealmCollection,Realm v0.89.0发布后,此答案会有点过时。