我有一个回收者视图,显示了学生列表。 所有的学生都被放在适配器的真实主义者中。
当用户可以请求数据刷新时,服务器会将学生列表发送回用户。 我现在正在做的是从服务器下载所有信息,将其存储在数据库中,而不是从数据库中检索(通过realmresults),而不是将realmresult转换为realmlist。
我的问题是如何正确更新用户界面? 我在文档中看到,realmlist有一个托管模式,他们自动更新ui .. 这个托管模式是什么?这是什么意思? 如何使用realmlist将其保持在托管状态? 使用真实主义者的正确方法(又称最佳实践)是什么?
请注意,我无法直接将我的信息保存为realmresult,因为我对我不希望保存的数据执行某些操作。
答案 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更新
RealmList
与RealmResults
:
RealmList
是保存为RealmObject
字段的RealmObject
列表。它代表了Realm中的一对多关系。
RealmResults
是查询的结果。
当数据发生变化时,它们(在托管模式下如果RealmList
)都会自动刷新。
您可以从RealmResults
RealmList.where()
获得RealmList
,如:
RealmResults results = myRealmList.where().findAll();
由于新的RealmCollection
,Realm v0.89.0
发布后,此答案会有点过时。