android - RealmObject changeListener

标签 android realm changelistener

我试图从官方文档的“通知”部分了解 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 对象的更新时(例如在第一个),两个监听器都会被调用。

这是官方文档所说的:

Listeners can also be attached to RealmObject instances as well as RealmResults instances. This allows you to react to changes to your objects and query results.

Lastly, typed-based change listeners will get notified when their referenced types change.

据我了解,看到的行为与第二个定义一致,但我需要使用第一个行为,也就是说,当与该监听器对应的对象发生更改时,我希望得到通知。 因此,如果第一个 Person 被更新,则只有其对应的监听器会收到通知,而不是所有 Person 监听器。

最佳答案

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

让更改监听器仅在确切的对象已更改时通知此处正在跟踪 https://github.com/realm/realm-java/issues/989 .

关于android - RealmObject changeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889817/

相关文章:

Android:无法使用android服务重复执行任务

ios - Realm realmWithPath 方法在 iOS 上崩溃

ios - 在 Swift 中将 JSON 解析到 Realm 数据库时如何防止 Realm 覆盖自身?

java - JTabbedPane触发事件

java - 带有 SpinnerNumberModel 的 JSpinner 总是返回值 0

android - 无法从 LocationListener 获取当前位置

android - 如何使用 glide 加载圆形 appcompat 操作栏 Logo

android - 非 Activity 类中的 Dagger 2 依赖项

java - Realm 加入列表

java - 如何使用 JSlider 制作 ChangeListener 来控制音量