RealmObject changeListener

泪湿孤枕 提交于 2019-12-11 02:25:17

问题


I'm trying to understand notification types in Realm from the Notifications section in the official docs, and when I'm using RealmObject addChangeListener in multiple managed object all of them are called when only one object is changing.

This is my code

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);
    }
});

When I trigger an update in any of these Person objects (for example in first) both of the listeners are being called.

This what official docs say:

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.

And

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

From what I understand the seen behaviour agrees with the second definition but I need to use the first behaviour, that's, I want to be notified when the object corresponding to that listener is changed. So, if first Person is updated, only its corresponding listener get notified, not all Person listeners.


回答1:


Right now it is happening because our change detection is not granular enough. It will trigger change listeners for all objects of the same type, not just those that changed.

Getting the changelisteners to only notify if the exact object has changed is being tracked here https://github.com/realm/realm-java/issues/989.




回答2:


Specific change listener is now supported.

official release!

Demo




回答3:


Use findFirstAsync() which returns a realmModel being empty and invalid. This is how you are able to get updates with its addChangeListener()



来源:https://stackoverflow.com/questions/37889817/realmobject-changelistener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!