Ich habe kürzlich erfahren, wie man verschachtelte Fragmente in Android erstellt . Ich weiß jedoch nicht, wie die Kommunikation zustande kommen soll.
Aus dem Lesen der Dokumentation zur Fragmentkommunikation weiß ich das
Die gesamte Kommunikation von Fragment zu Fragment erfolgt über das zugeordnete Aktivität. Zwei Fragmente sollten niemals direkt kommunizieren.
Dies ist für Geschwisterfragmente innerhalb einer Aktivität sinnvoll, aber für die Eltern-Kind-Fragmentkommunikation weniger sinnvoll. Muss ich den ganzen Weg bis zur Aktivität Nur für das Kindfragment gehen, um mit dem Elternfragment zu sprechen? Wenn die Antwort ein einfaches "Ja" ist, dann kann ich das tun. Wenn es ein "Nein" ist, wie würde dann das Code-Design aussehen?
Ich sehe in der geschachtelten Fragmentdokumentation , dass man getParentFragment()
, um einen Verweis auf das Elternfragment zu erhalten. Bedeutet das, dass das Kind direkt mit dem Elternteil kommunizieren soll? Das scheint entgegengesetzt zu dem, was mit einem normalen Fragment, das mit der Elternaktivität kommuniziert, gefördert wird.
Nach Rahul Sharmas Ratschlag in den Kommentaren habe ich Interface Callbacks verwendet, um vom Child Fragment zum Parent Fragment und zur Activity zu kommunizieren. Ich habe auch diese Antwort an die Code Review gesendet . Ich nehme die Nicht-Antwort dort (zum Zeitpunkt des Schreibens) als ein Zeichen, dass es keine größeren Probleme mit diesem Designmuster gibt. Es scheint mir im Einklang mit den allgemeinen Leitlinien in den offiziellen Dokumenten zur Fragmentkommunikation zu stehen.
Das folgende Beispielprojekt erweitert das in der Frage angegebene Beispiel. Es verfügt über Schaltflächen, die eine Aufwärtskommunikation von den Fragmenten zur Aktivität und vom Kindfragment zum Elternfragment initiieren.
Ich habe das Projektlayout so eingerichtet:
Die Aktivität implementiert die Listener aus beiden Fragmenten, sodass sie Nachrichten von ihnen abrufen kann.
Optional TODO: Wenn die Aktivität die Kommunikation mit den Fragmenten initiieren wollte, könnte sie direkt darauf verweisen und dann eine ihrer öffentlichen Methoden aufrufen.
%Vor%Das übergeordnete Fragment implementiert den Listener vom Child Fragment, so dass er Nachrichten von ihm empfangen kann.
Optional TODO: Wenn das Elternfragment die Kommunikation mit dem Kindfragment initiieren wollte, könnte es nur eine direkte Referenz darauf erhalten und dann eine seiner öffentlichen Methoden aufrufen.
%Vor%Das untergeordnete Fragment definiert Listener-Interfaces für die Aktivität und für das übergeordnete Fragment. Wenn das Child Fragment nur mit einem von ihnen kommunizieren muss, kann die andere Schnittstelle entfernt werden.
%Vor% Obwohl @ Suraghs Antwort korrekt ist, möchte ich jedoch eine weitere Möglichkeit hinzufügen, um Daten zwischen Fragments
oder Activity
zu übergeben. Ganz gleich, ob es sich um Activity
oder Fragment
handelt, Sie können Daten mit dem Ereignisbus in 3 Schritten übergeben:
1- Definieren Sie ein Ereignis (Nachricht):
%Vor% 2- Registrieren und Entfernen der Registrierung für Ereignisse: Um Ereignisse empfangen zu können, muss sich die Klasse für den Ereignisbus registrieren / abmelden. Der beste Platz für Activities
und Fragments
ist onStart()
und onStop()
Um eine Veranstaltung erhalten zu können, müssen Sie diese Veranstaltung abonnieren. Fügen Sie dazu @Subscribe
anotation zu einer Ihrer Methoden in Ihrer Klasse hinzu.
3- Veröffentlichen Sie ein Ereignis
%Vor%Weitere Dokumentation und Beispiele finden Sie Hier . Es gibt auch andere Bibliotheken wie: Otto
Tags und Links android android-fragments