我有一个recyclerview,其中显示了学生列表。所有学生都被保存在适配器的领域列表中。
当用户可以要求刷新数据时,服务器将把学生列表发回给用户。我现在要做的是从服务器下载所有信息,将其存储在db中,而不是从数据库中检索(通过realmresults),而不是将realmresult转换为realmlist。
我的问题是如何正确更新UI?我在文档中看到,realmlist具有托管模式,在此模式下他们会自动更新ui。什么是托管模式?这是什么意思?如何使用领域列表将其保持在托管状态?什么是使用地产经纪人的正确方法(又名最佳实践)?
请注意,我无法直接将我的信息保存为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
Run Code Online (Sandbox Code Playgroud)
受管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();
Run Code Online (Sandbox Code Playgroud)
如何正确更新用户界面
建议使用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。它表示领域中的一对多关系。
RealmResults 是查询的结果。
RealmList当数据更改时,它们两者(如果处于托管模式)都将自动刷新。
你可以得到一个RealmResults从RealmList通过RealmList.where()这样的:
RealmResults results = myRealmList.where().findAll();
Run Code Online (Sandbox Code Playgroud)
Realm v0.89.0发布后,由于new,这个答案可能会过时RealmCollection。