Mit Beobachtbaren in Android
Ich umsetzen wollen einen Navigation View
mit vielen Fragmente, die hängen Total auf einen definierten Wert in der MainActivity
. Ich weiß, dass die Variablen in der MainActivity aufgerufen werden kann mit definierten Methode in MainActivity aus anderen Fragmente zu erhalten die Wert, aber der Haken ist hier, dass der Wert der Variablen in der MainActivity kann ändern (läuft auf einem AsyncThread). Nun, ich entweder den code ändern, so dass meine Fragmente aktualisieren Ihren Wert basierend auf einen event in dem fragment selbst oder verwenden Sie SharedPreference
. Aber ich will nicht von SharedPreferences, weder müssen überprüfen, ob die änderung des Werts unnötig viele Male.
Ich weiß, in RxJS, verwenden wir Beobachtbaren, dass wird Asynchron ausgeführt und funktioniert in einer Weise ähnlich einem Förderband. Ein bisschen googeln über die offiziellen docs : Beobachtbare bestätigt meine Vermutung, der etwas ähnliches in Android, aber konnte keine richtige Anleitung oder Erklärung, wie es zu implementieren. So, bin auf der Suche nach einem einfachen code-Schnipsel geben könnte Klarheit, um zu Beobachten, wie funktioniert Android, und wenn es ist Async und wenn die basiert ähnlich RxJS Durchführung. (Nein, ich will nicht RxJS Umsetzung)
Test-Fall:
MainActivity : int a, b (need observable for both variables)
Frag1 : int a1 , b1, a1changed(),b1changed()
Frag2 : int a2 , b2, a2Changed(), b2changed()
MainActivity enthält Ganzzahlen, dessen Wert bei änderung widerspiegeln sollte, die in der entsprechenden ganzen zahlen über die Fragmente und fordert separater Funktion für jedes Fragment auf die Veränderung bemerkt.
- Sie können entweder Java ist Beobachtbar als pro die docs, die du verlinkt hast zu oder der Umsetzung Ihrer eigenen. Ich persönlich empfehle, eine eigene Implementierung der Muster in der Reihenfolge zu lernen, ist es gut. Es gibt Tonnen von tutorials auf dem Netz zu verwenden. Wenn es hilft, könnte man diese Antwort von mir, wo ich versuchte zu erklären, ist es so einfach, wie ich konnte 🙂
- Natürlich gibt es tutorials online, aber das problem mit Ihnen ist, dass Sie in der Regel beziehen sich auf bestimmte Fälle, die nicht erforderlich sind. Bin sicher, wenn ich sitzen für einen halben Tag, tracing es aus, ich würde eine Antwort erhalten. Da ich aber nicht jetzt, ich bat um ein einfacheres Beispiel zu deren Umsetzung. Das wird sicher anderen helfen, die auch wie ich nicht wollen, zu gehen, durch die ganze Sache nur noch und sind auf der Suche für eine einfachere Erklärung für die Android-Verhalten mit Observablen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein einfaches Beispiel mit einer
Activity
- und ein EinzelzimmerFragment
aber es wird das gleiche mit anderen Fragmenten.Zunächst müssen Sie eine Klasse erstellen die stehen für den Wert, den Sie möchten, zu beobachten, in Ihrem Fall ist es eine einfache
int
so erstellen Sie eine Klasse mit diesemint
und erstreckt sichObservable
(es implementiertSerializable
zu vereinfachen den Austausch zwischen Aktivität und fragment):Dann verwenden Sie diese beobachtbaren int in eine Aktivität (activity-layout enthält eine
Button
und einFrameLayout
dient zur Anzeige einerFragment
):Schließlich erstellen Sie eine
Fragment
hören, dass Sie einen Wert ändern:Ich versuche, die Namen meiner Variablen das gleiche wie bei dir, ich hoffe es wird Euch helfen.
Observable
- Objekt hat mehrere Eigenschaften, die Sie erstellen, getter/setter für jeden von Ihnen, und fügen einen AufrufnotifyObservers()
im setter, wird es Ihnen sagen, für jeden Beobachter das Objekt verändert hat (nicht aber die Immobilie).Serializable
ist nur hier, um die übergabe von Daten aus der Aktivität für Fragmente mit einem Bundle mitputSerializable
Methode.ObservableInteger
hat ein weiteres Feld, das die Klasse lassen sagenObservableCharacter
. Ich möchte beachten Sie diese und Benachrichtigen der main-Klasse über die änderungen inObservableCharacter
. Wie kann ich die richtige Meldung?Es ist ein gutes Beispiel über die Verwendung von Beobachtbaren Android (java.util.Beobachtbare) hier:
https://andhradroid.wordpress.com/2012/04/05/object-observer-pattern-in-android/
Und ein weiteres Beispiel über die Verwendung von Beobachter-Muster in Java:
http://www.journaldev.com/1739/observer-design-pattern-in-java.
Generell gibt es zwei Möglichkeiten:
Mir gefällt der zweite Weg mehr, zum Beispiel:
(Sorry, ich möchte sicherstellen, dass es funktioniert, damit ich ein komplettes Beispiel)
Die Beobachtbaren:
Der Beobachter:
Die MainActivity:
Die Fragment1:
Das Fragment2:
Der Adapter:
Die Haupt-layout activity_main.xml:
Das fragment-layout fragment_basic.xml :
Reaktiv ist nicht Teil von Android, aber Sie sind wahrscheinlich auf der Suche nach dieser Bibliothek:
https://github.com/JakeWharton/RxBinding
Die landing-page ist, fehlt eine einleitende Beispiel, so haben Sie Blick auf die javadoc. Dieser Beitrag soll Ihnen einen guten start: So erstellen Sie ein Beobachten von der OnClick-Event-Android? Hier ist der Beispielcode von Matt, um Ihnen den Einstieg
Android bietet jetzt ViewModels mit LiveData für Ihren Zweck. Ein view-Modell ist an ein Objekt gebunden mit einem Lebenszyklus (Fragment, Aktivität) und lebt so lange wie das Objekt. In Ihrem Fall würden Sie eine Ansicht erstellen, Modell gebunden an die Aktivität, die zugänglich ist durch alle Fragmente.
Von der Android-Dokumentation:
Verwendung einer view-Modell für den Austausch von Daten zwischen den Fragmenten, die Sie benötigen, um:
Hier ist die zentrale code-snippet von der Android-Dokumentation, wie ViewModels für eine master-detail-Ansicht: