2017-11-22 1 views
0

Wenn ich ein Objekt A, das eine Realm-Liste von B enthält, wenn ich eine Abfrage für ein bestimmtes A habe und ein Element in seiner B Liste bearbeiten; Ich erhalte keine ÄnderungsbenachrichtigungBenachrichtigungen in Realm für innere Objekte ändern?

Ist dies das gewünschte Verhalten?

Codebeispiel:

class ExerciseInfo : RealmObject() { 
    @PrimaryKey 
    var id: String? = null 
    var muscleFields: MuscleFields? = null 
} 

class MuscleFields : RealmObject() { 
    var muscles: RealmList<Muscle>? = null 
} 

class Muscle : RealmObject() { 
    var id: String? = null 
    var name: String? = null 
} 

//Example, performed inside a Realm transaction 
realm.where(ExerciseInfo::class.java) 
    .findFirst() 
    .muscleFields 
    ?.muscles 
    ?.let{ it.first().name += ":)" } 

Alle der oben genannten ist Beispielcode - aber das Szenario ist genau das gleiche.

Ich kann überprüfen, dass die Bearbeitung durchgeführt und in der Datenbank gespeichert wird; und dass für das ExecuteInfo RealmObject keine Änderungsbenachrichtigung ausgelöst wird, unabhängig davon, ob ich es mit einer addChangeListener() - oder der Flowable-Methode verwende. Darüber hinaus funktioniert dasselbe Szenario , wenn die vorgenommene Änderung direkt in der Übungsklasse durchgeführt wird, z. Bearbeiten einiger Felder direkt in der ExerciseInfo-Klasse und nicht eines anderen Objekts darin.

Ich hoffe, dass das Sinn macht. Thought Id poste dies auf SO vor dem Realm Github, da es etwas ist, das ich verpasst habe, und kein Bug.

Irgendeine Idee? - Gib mir Bescheid. Vielen Dank!

+0

Was die 'RealmChangeListener' hinzugefügt? – EpicPandaForce

+0

@EpicPandaForce Das ExerciseInfo-Objekt. – zoltish

+0

Wie, 'exerciseInfo.addChangeListener (new RealmObjectChangeListener' oder so ähnlich? Nicht die' realmResults'? – EpicPandaForce

Antwort

0

RealmChangeListener hinzugefügt Objekte werden direkt nicht für Änderungen in der Liste (Link-Feld) mitgeteilt werden.

Dazu müssen Sie den Listener zu einem RealmResults<T> hinzufügen.

+0

Wenn ich nach einer Liste frage, möchte ich benachrichtigt werden, wenn eines der Elemente geändert (aktualisiert oder entfernt) wird, sowie wenn neue Elemente hinzugefügt werden.Für ein einzelnes Element möchte ich nur wissen, ob es aktualisiert oder entfernt wird Das funktioniert für t er meistens, aber nicht wenn ich ein Items innere Felder aktualisiere (wie in meinem Beispiel oben). – zoltish

+0

Einzelobjektbenachrichtigungen melden keine Benachrichtigung für verknüpfte Objekte. Dafür benötigen Sie ein 'RealmResults ' Ihres einzigen Objekts (was ich zu empfehlen empfehle, wenn Sie nicht nach bestimmten Feldänderungen lauschen), was mit 'equalTo (" id ", id)' Bedingung erfolgen kann. Auf diese Weise ist es auch gegen das Löschen von Elementen resistent. – EpicPandaForce

0

Versuchen in Ihrer Aktivität folgenden Code

class SampleActivity extends AppCompatActivity implements RealmChangeListener<Realm> { 


onCreate(...){ 

realm.addChangeListener(this);// make sure you init realm transaction 

} 

    @Override 
    public void onChange(@NonNull Realm realm) { 
    // this method will be call after any change in realm 
    } 
} 

Vergessen Sie nicht, alle registrierten Listener in onDestroy Verfahren zu entfernen.


ODER

realm = Realm.getDefaultInstance(); 

realm.addChangeListener(new RealmChangeListener<Realm>() { 
      @Override 
      public void onChange(Realm realm) { 
       // do something 
      } 
     }); 
Verwandte Themen