我正在使用带有RxJava Observable回调的Realm。我的问题是当用户在领域中交互并更改属性时,回调是连续调用并使UI崩溃。
我只想在插入任何数据时想要领域监听器,或者删除它以保持数据同步。在Realm中有可能吗?
修改
当我的recyclerView被显示时,它会将每个项目设置为看到状态,这意味着所有项目将被保存到具有看到值的领域。因此,我不想要领域Observable的次数被调用太多次了。当我将数据设置为已显示状态时,我正在寻找一些让领域停止监听的方法,但它在RecyclerView适配器中也难以处理。幸运的是,我的数据只能编辑这个属性,所以我只想在插入或删除项目时保持同步,这种方式是可以接受的。看起来像境界真的很快,但在某些情况下它很难控制。
答案 0 :(得分:0)
我只想在插入或删除项目时保持同步,
这很简单,只需使用RealmRecyclerViewAdapter:
public class MyAdapter extends RealmRecyclerViewAdapter<MyRealmObject, ViewHolder> {
public MyAdapter(OrderedRealmCollection<T> results) {
super(results,
true /* add a RealmChangeListener to keep adapter in sync */,
false /* ignore "changes" and only care about insert/delete */);
}
/* onCreateViewHolder, onBindViewHolder, ViewHolder */
}
如果您仍想听取更改并在需要时更新项目,则可以使用RealmObjectChangeListener
。
MyObject myObject;
if(myObject != null && myObject.isValid()) {
myObject.removeAllChangeListeners();
}
myObject = ..
myObject.addChangeListener(new RealmObjectChangeListener<MyObject>() {
... // receive "field set" and whether it is changed
// make sure you return out if `changeSet.isDeleted() == true`
}