我试图从正式文档中的通知部分了解领域中的通知类型,当我在多个托管对象中使用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侦听器。
发布于 2016-06-18 05:28:26
现在发生这种情况是因为我们的变化检测不够细。它将为所有相同类型的对象触发更改监听器,而不仅仅是那些更改的对象。
让变更者只通知确切的对象是否已经改变,在这里被跟踪,https://github.com/realm/realm-java/issues/989。
发布于 2017-03-23 01:20:47
使用findFirstAsync(),它返回一个空的和无效的realmModel。这就是如何使用它的addChangeListener()获得更新的方法。
https://stackoverflow.com/questions/37889817
复制相似问题