Fragment-Aktivität, Kommunikation und inter-fragment Kommunikation
Eine Frage zum design über die Kommunikation zwischen Fragmenten,
warum würde jemand verwenden, ein bisschen kompliziert callback-pattern implementieren Listener,
im Vergleich eine einfache statische Methoden einer Klasse, die wir nennen wollen, die eine Methode aus (etwas
ähnlich wie Singleton für einige Methoden/Attribute).
Gibt es irgendwelche performance-Problem, oder ist es "nur" ein schlechtes OO-Programmierung Praxis für die Android/Java?
So der einfache Weg für zwei-Wege-Kommunikation können sein:
MyActivity activity
Fragment A
Fragment B
static method canBeCalledFromAnywhere() {}
method activityMethod()
call FragmentA.doSomething();
call FragmentB.doSomething();
FragmentA
onCreate()
onMe = this;
static method doSomething()
do something with static or use onMe for instance;
method oneMethodFragmentA()
call MyActivity.canBeCalledFromAnywhere();
FragmentB
onCreate()
onMe = this;
static method doSomething()
do something with static or use onMe for instance;
method oneMethodFragmentB()
call MyActivity.canBeCalledFromAnywhere();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es besser, zu verwenden klar definierte Kommunikations-Schnittstelle als Annahme vorhanden ist. Deshalb, wenn Sie definieren
interface
für Ihre Kommunikation dann:Fragment
können leicht überprüfen, wenn der ElternteilActivity
implementiert dieseSchnittstelle, so
Fragment
wird in der Lage sein, zu kommunizieren, seine Bedürfnisse,mit dem Programmieren anfangen, das führt zu einer Art der Standardisierung und das ist gut,
wenn Sie die Schnittstelle ändern, aber keine Umsetzung.
Möglicherweise möchten Sie auch zu Lesen das Android SDK Artikel.
Wenn Sie eine einfache use-case-Szenario für das fragment/activity, dann sind Sie die Lösung tragfähig ist. Nicht immer das kaufen, was die java-Puristen sagen - wenn wir das alle tun, würde niemand jemals etwas zu tun. Manchmal ist es am besten zu werfen-Konvention aus dem Fenster und tun, was ist die Schnellste und einfachste zu tun - vor allem, wenn es eine kleine app, und jemand wird Sie bezahlen, es zu tun.
Der Grund für die Verwendung der dokumentierten Rückrufe und empfohlenen Muster ist, dass Sie arbeiten mit dem Android-framework, anstatt gegen Sie. Die Verwendung von statischen Methoden vollständig umgeht dies und sieht einfach aus, aber es gibt Probleme auf zwei Ebenen.
Ersten, aus einem Objekt-Orientierten design-Perspektive Sie sind eng Kopplung der Klassen, die sehr unterschiedliche und voneinander unabhängige Aufgaben, so dass Sie schwieriger zu re-verwenden und umgestalten. Die weitere statische Methoden, die Sie führen in Ihrem fragment-und activity-Klassen, desto schlechter dieses problem bekommen wird.
Zweite, Sie arbeiten außerhalb des Lebenszyklus für beide Arten von Objekt und dies wird dazu führen Sie eine Menge Schmerzen. First off, Fragmente zerstört und neu erstellt durch Android die ganze Zeit. Zum Beispiel, wenn Sie Ihr Gerät drehen und die Anzeige wechselt von Porträt-auf landscape-Modus alle Ihre Fragmente sind zerstört und wieder neu angelegt - weil in der Landschaft, die Sie verwenden möglicherweise verschiedene Fragmente oder die Darstellung unterschiedlicher Inhalte in die gleichen Fragmente. Fragmente und Aktivitäten können auch angehalten werden, wenn der Benutzer navigiert zu einer neuen Aktivität oder andere Anwendung.
Erstellen von statischen Methoden auf Fragmente und Aktivitäten, und Sie können aufrufen, diese Methoden zu jeder Zeit, und Sie haben keine Ahnung, ob das fragment oder die Aktivität ist auch sichtbar, wenn Sie das tun. Sie wissen nicht, welche Phase des Lebenszyklus ist es, wenn es ist Teil der aktuellen Aktivität und damit bist du entweder schreiben eine Menge zusätzlichen code, um damit umzugehen, oder schreiben gar keine (und haben einen sehr fehlerhaften Anwendung).
Rückrufe verwenden bedeutet auch, dass in einer multi-fragment-Aktivität können Sie leichter sicherstellen, dass die alternative-Fragmente verwendet werden können, für alternative layouts und der übergeordneten Aktivität, zu entscheiden, welches fragment zu verwenden, kann sicherstellen, dass Daten von Geschwister-Fragmente, die an das korrekte fragment.
Laden Sie die neueste Android-tools (SDK r20, Werkzeuge r14 als dies geschrieben wurde) und erstellen Sie ein neues Android application project (
New > Other > Android Application Project
)unter Verwendung der Eclipse IDE. Auf die "Aktivität Anlegen" wählen Sie im Schritt einMasterDetailFlow
Basis-Projekt. Das instanziieren einer Anwendung mit zwei Fragmenten (ein ListFragment und eine detail-Ansicht), funktioniert direkt aus der box, bevor Sie mit dem schreiben einer Zeile code. Sie können prüfen, wie Sie kommunizieren über die wichtigsten Aktivitäten.