RealmObject changeListener

时间:2016-06-17 20:21:43

标签: android realm changelistener

我试图从官方文档中的Notifications部分了解Realm中的通知类型,当我在多个托管对象中使用RealmObject addChangeListener时,只有一个对象在更改时才会调用它们。

这是我的代码

Person first = realm.where(Person.class).equalTo("id", 0).findFirst();

first.addChangeListener(new RealmChangeListener<Person>() {
    @Override
    public void onChange(Person person) {
        Log.e(LOG_TAG, "First element is changing: " + person);
    }
});

Person second = realm.where(Person.class).equalTo("id", 1).findFirst();

second.addChangeListener(new RealmChangeListener<Person>() {
    @Override
    public void onChange(Person person) {
        Log.e(LOG_TAG, "Second person is changing: " + person);
    }
});

当我在任何这些Person对象中触发更新时(例如在第一个中),都会调用两个侦听器。

这是官方文件说的:

  

还可以将侦听器附加到RealmObject实例以及RealmResults实例。这允许您对对象和查询结果的更改做出反应。

并且

  

最后,基于类型的更改侦听器将在其引用类型发生更改时收到通知。

根据我的理解,所看到的行为与第二个定义一致,但是我需要使用第一个行为,我希望在对应于该侦听器的对象发生更改时得到通知。 因此,如果更新第一个Person,则只通知其相应的侦听器,而不是所有Person侦听器。

3 个答案:

答案 0 :(得分:2)

现在它正在发生,因为我们的变化检测不够精细。它将触发相同类型的所有对象的更改侦听器,而不仅仅是那些已更改的对象。

在此处https://github.com/realm/realm-java/issues/989跟踪更改侦查器仅通知确切对象是否已更改。

答案 1 :(得分:1)

现在支持特定的更改侦听器。

official release!

Demo

答案 2 :(得分:0)

使用findFirstAsync()返回一个空的无效的realmModel。这是您使用addChangeListener()

获取更新的方法