2016-04-05 15 views
1

Ich habe eine Recyclerview, die eine Liste von Studenten zeigt. Alle Schüler werden in einer Realmliste im Adapter gehalten.Android: Wie Realmlist in der UI aktualisiert wird

Wenn der Benutzer eine Datenaktualisierung anfordern kann, sendet der Server die Liste der Schüler zurück an den Benutzer. Was ich jetzt mache, ist, alle Informationen vom Server herunterzuladen, sie in der Datenbank zu speichern, als sie von der Datenbank abzurufen (über realmresults) und dann das realmresult in realmlist umzuwandeln.

Meine Frage ist, wie man die UI richtig aktualisiert? Ich habe in der Dokumentation gesehen, dass Realmlist einen verwalteten Modus haben, in dem sie die UI automatisch aktualisieren. Was ist das Managed-Modus? Was bedeutet das? Wie verwende ich die Realmliste, um sie in einem verwalteten Zustand zu halten? Und was ist der richtige Weg (auch Best Practice) um Realmisten zu benutzen?

Beachten Sie, dass ich meine Informationen nicht direkt als Bereichsresultat speichern kann, weil ich eine Manipulation an den Daten durchführe, die nicht gespeichert werden sollen.

Antwort

4

Managed Object vs. Standalone

Die eigenständige RealmObject/RealmList wird durch das Objekt Konstruktor oder der Realm.copyFromRealm() Methode erstellt. Die Daten, auf die im eigenständigen Objekt zugegriffen wird, durchlaufen nicht die Underline-Speicher-Engine, sondern verhalten sich wie normale Objekte. So wird das eigenständige Objekt nicht aktualisiert, wenn sich Daten ändern. Beispiele für Standalone-Objekt:

MyModel myModel = new MyModel(); // Standalone 

MyModel model = realm.where(MyModel.class).findFirst(); // This is managed object. 
MyModel standaloneModel = realm.copyFromRealm(model); // The returned value is standalone object. 

MyList myList = new MyList(); // Standalone 

Die verwaltete RealmObject/RealmList zugreifen Daten obwohl zugrunde liegenden Speicher-Engine Realm. Sie werden erstellt, wenn Sie von Realm abfragen, oder die Rückgabe von copyToRealm() (und seiner Variantenmethode). Wie:

MyModel model = realm.where(MyModel.class).findFirst(); 

MyModel model = new MyModel(); // This is a standalone object. 
model = realm.copyToRealm(modle); // The returned value is managed by Realm now. 

MyList myList = realm.where(MyModel.class).findFirst().getMyList(); 

Wie man richtig die Benutzeroberfläche aktualisiert

Der Vorschlag Realm Änderung Hörer verwendet. Siehe https://realm.io/docs/java/latest/#notifications

Und was ist der richtige Weg (aka Best Practice) RealmList zu verwenden?

Dies ist ein wenig verwirrend, aber Realm führt RealmCollection in die nächste Hauptversion ein (v0.89.0). Siehe https://github.com/realm/realm-java/pull/2345.

Hinweis, dass ich meine Informationen als realmresult direkt nicht halten, weil im eine Manipulation an den Daten durchführen, die ich es nicht wollen, um gerettet werden.

Wenn der RealmList im verwalteten Modus ist, werden die Datenänderungen ebenfalls gespeichert. Wenn Sie nicht möchten, dass einige Daten gespeichert werden, können Sie in diesen Feldern eine @Ignore Annotation verwenden.Siehe https://realm.io/docs/java/latest/#ignoring-properties


-Update auf 04072016

RealmList gegen RealmResults:

RealmList eine Liste von RealmObject als Feld eines RealmObject gespeichert ist. Es repräsentiert die Eins-zu-Viele-Beziehung in Realm.

RealmResults ist das Ergebnis der Abfrage.

von ihnen Both (wenn RealmList in Managed-Modus) wird automatisch aktualisiert, wenn Datenänderungen.

RealmResults results = myRealmList.where().findAll(); 

Diese Antwort wird ein bisschen out-of-date nach Realm v0.89.0 freigegeben, aufgrund neuer RealmCollection:

Sie können eine RealmResults von einem RealmList von RealmList.where() wie bekommen.

+0

Hey! Vielen Dank für Ihre Antwort! Könnten Sie mir sagen, was ist der Unterschied zwischen realmlist und realmresults? Wenn beide die zugrunde liegenden Daten ändern, warum sollte jemand die Realmliste verwenden? Ich meine, wenn ich richtig verstehe, aktualisieren die Realm-Ergebnisse immer meine UI, also warum sollte ich sie einfach benutzen? Was ist der Unterschied zwischen Realmresults und Realmlist? Wann sollten wir jedes benutzen? –

+0

Die Antwort wurde aktualisiert. – beeender

+0

Vielen Dank für die anawer wieder :) Ich entschied, dass meine beste Option für jetzt ist die Realmlist, wie im usinf das Add zu verwenden und entfernen mmethods viel, etwas, das nicht le mit der realmresults ist POSSI, ich hoffe, dass realmcollections auch hat diese Methode auch. Es gibt uns viel Flexibilität, um verschiedene Listen gleichzeitig zu halten und neue Informationen hinzuzufügen, ohne sie in der Datenbank zu speichern. –

Verwandte Themen