2016-06-17 6 views
2

公式ドキュメントの通知セクションから通知タイプを理解しようとしています。複数の管理対象オブジェクトでRealmObject addChangeListenerを使用している場合は、1つのオブジェクトだけが変更されているときにすべて呼び出されます。RealmObject changeListener

これは私が(最初の例の場合)、これらのPersonオブジェクトのいずれかで更新をトリガするときのリスナーの両方が呼び出されている私のコード

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

あります。

この公式ドキュメントは言う:

リスナーもインスタンスだけでなく、RealmResultsインスタンスをRealmObjectに取り付けることができます。これにより、オブジェクトの変更やクエリの結果に反応することができます。

そして

その参照型が変更されたときに最後に、入力されたベースの変更リスナーが通知されます。

私の見ている動作は2番目の定義に同意しますが、最初の動作を使用する必要があります。つまり、そのリスナーに対応するオブジェクトが変更されたときに通知を受けたいと思います。 したがって、最初のPersonが更新された場合、対応するリスナーだけが通知され、すべてのPersonリスナーは通知されません。

答えて

2

変更の検出が十分に細かく行われていないため、変更されたものだけでなく、同じタイプのすべてのオブジェクトの変更リスナーがトリガーされます。

正確なオブジェクトが変更された場合にのみ通知するようにchangelistenersに指示すると、https://github.com/realm/realm-java/issues/989が追跡されます。

+0

ありがとう!私はそれを言っている多くの人を見つけましたが、公式の文書で読んだもののために私がそれらを無視したほど古いものもありました。再度、感謝します! – juanes666

0

空の無効なrealmModelを返すfindFirstAsync()を使用します。これは、あなたのaddChangeListener()で更新を得る方法です

関連する問題