Kommunikation zwischen verschachtelten Fragmenten in Android

8

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.

    
Suragch 14.09.2016, 13:23
quelle

2 Antworten

12

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.

Beispielprojekt

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:

Hauptaktivität

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%

Elternfragment

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%

Kindfragment

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%     
Suragch 19.09.2016, 00:48
quelle
3

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()

%Vor%

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.

%Vor%

3- Veröffentlichen Sie ein Ereignis

%Vor%

Weitere Dokumentation und Beispiele finden Sie Hier . Es gibt auch andere Bibliotheken wie: Otto

    
Milad Faridnia 03.12.2017 11:04
quelle

Tags und Links