更改属性时调用Stop Realm侦听器

时间:2018-04-06 06:59:45

标签: android realm

我正在使用带有RxJava Observable回调的Realm。我的问题是当用户在领域中交互并更改属性时,回调是连续调用并使UI崩溃。
我只想在插入任何数据时想要领域监听器,或者删除它以保持数据同步。在Realm中有可能吗?

修改
当我的recyclerView被显示时,它会将每个项目设置为看到状态,这意味着所有项目将被保存到具有看到值的领域。因此,我不想要领域Observable的次数被调用太多次了。当我将数据设置为已显示状态时,我正在寻找一些让领域停止监听的方法,但它在RecyclerView适配器中也难以处理。幸运的是,我的数据只能编辑这个属性,所以我只想在插入或删除项目时保持同步,这种方式是可以接受的。看起来像境界真的很快,但在某些情况下它很难控制。

1 个答案:

答案 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`
}