it-swarm.com.de

Eine Aktivität und alle anderen Fragmente

Ich denke an die Implementierung eines Bildschirms mit Activity und aller anderen Bildschirme mit Fragments und managing all the fragments thru the activity.

Ist es eine gute Idee? und meine Antwort ist NEIN aber dennoch möchte ich mehr über diesen Gedanken wissen.

Was sind die Vor- und Nachteile der Idee?

Anmerkung:

Bitte geben Sie mir nicht den Link für Fragment und Aktivität.

EDIT:

Hier ist etwas über Fragmente und Aktivität:

Profis:

  1. Fragmente sollen mit Aktivitäten als Unteraktivität verwendet werden.
  2. Fragmente sind kein Ersatz für Aktivitäten.
  3. Fragmente sind für die Wiederverwendbarkeit gedacht (Sie müssen wissen, auf welche Weise die Wiederverwendbarkeit erreicht werden kann.).
  4. Fragmente sind die beste Möglichkeit, Code für Tablets und Telefone zu schreiben.

Nachteile:

  1. Wir müssen die Schnittstelle implementieren, um die Daten von Fragmenten zu erhalten.
  2. Für den Dialog müssen wir einen langen Weg gehen, um es zu zeigen.

Warum sollten wir Fragmente verwenden, wenn wir keine Tabletten in Betracht ziehen? Was ist der Zeitunterschied zwischen Aktivität und Fragment?

157
Vineet Shukla

Dies hängt von der App ab, die Sie erstellen. Ich habe mit beiden Ansätzen mehrere Apps erstellt und kann nicht sagen, dass ein Weg immer besser ist als der andere. Die letzte App, die ich erstellt habe, verwendete den einfachen Activity - Ansatz und eine Navigation im Facebook-Stil. Bei der Auswahl von Elementen aus der Navigationsliste aktualisiere ich einen einzelnen Container Fragment, um diesen Abschnitt anzuzeigen.

Das heißt, mit einer einzigen Activity ist auch eine Menge Komplexität verbunden. Angenommen, Sie haben ein Bearbeitungsformular, und für einige der Elemente, die der Benutzer auswählen oder erstellen muss, muss er zu einem neuen Bildschirm wechseln. Bei Aktivitäten rufen wir einfach den neuen Bildschirm mit startActivityForResult auf, aber mit Fragments gibt es keine solche Funktion, sodass Sie den Wert auf Activity speichern und die Hauptbearbeitung ausführen müssen Fragment überprüfen Sie die Activity, um festzustellen, ob Daten ausgewählt wurden und dem Benutzer angezeigt werden sollen.

Was Aravind über das Festhalten an einem einzelnen Activity - Typ sagt, ist ebenfalls wahr, aber nicht wirklich einschränkend. Ihre Aktivität wäre eine FragmentActivity und solange Sie kein MapView benötigen, gibt es keine wirklichen Einschränkungen. Wenn Sie jedoch Karten anzeigen möchten, können Sie dies tun, aber Sie müssen entweder die Android= Compatibility Library so ändern, dass FragmentActivity um MapActivity erweitert wird. oder benutze das öffentlich zugängliche Android-support-v4-googlemaps .

Letztendlich haben die meisten Entwickler, von denen ich weiß, dass sie den einen Activity - Weg gegangen sind, mehrere Aktivitäten durchgeführt, um ihren Code zu vereinfachen. Auf einem Tablet stecken Sie manchmal nur mit einer einzigen Activity fest, um die verrückte Interaktion zu erreichen, mit der sich Ihre Designer auskennen :)

- BEARBEITEN -

Google hat endlich MapFragment für die Kompatibilitätsbibliothek freigegeben, sodass Sie den Android-Support-v4-Googlemaps-Hack nicht mehr verwenden müssen. Lesen Sie hier mehr über das Update: Google Maps Android API v2

- EDIT 2 -

Ich habe gerade diesen tollen Beitrag über den modernen (2017) Zustand von Fragmenten gelesen und mich an diese alte Antwort erinnert. Ich dachte, ich würde teilen: Fragmente: Die Lösung für alle Probleme von Android

91
JustinMorris

Ich bin dabei, ein Projekt (5 Monate in der Entwicklung) zu beenden, das 1 Aktivität und 17 Fragmente im Vollbildmodus enthält. Dies ist mein zweites fragmentbasiertes Projekt (vorher waren es 4 Monate).

Profis

  • Die Hauptaktivität besteht aus 700 Codezeilen, mit denen die Reihenfolge der Fragmentnavigation einfach gesteuert werden kann.
  • Jedes Fragment ist schön in seine eigene Klasse unterteilt und relativ klein (~ paar hundert Zeilen UI-Zeug).
  • Das Management kann sagen, "hey, wie wäre es, wenn wir die Reihenfolge dieser Bildschirme ändern", und ich kann es sehr einfach tun, da diese Fragmente nicht voneinander abhängen, sondern alle über die Aktivität kommunizieren. Ich muss nicht durch einzelne Aktivitäten graben, um herauszufinden, wo sie sich gegenseitig anrufen.
  • meine App ist sehr grafikintensiv und würde niemals als 1-Bildschirm-1-Aktivität funktionieren. Bei all diesen Unteraktivitäten im Speicher würde der App die ganze Zeit der Speicherplatz ausgehen, sodass ich alle nicht sichtbaren Aktivitäten finish() und die gleiche Steuerungslogik für die Navigation erstellen müsste, wie ich es tun würde mit Fragmenten. Könnte es auch mit Fragmenten nur deswegen tun.
  • wenn wir jemals eine Tablet-App machen, fällt es uns leichter, Dinge neu zu faktorisieren, da bereits alles gut voneinander getrennt ist.

Nachteile

  • man muss lernen, wie man fragmente benutzt
83
Tamas

Stellen Sie zunächst sicher, dass Sie ein modulares Design mit Modell, Ansicht und Präsentator haben, das nicht in hohem Maße von einer Aktivität oder einem Fragment abhängig ist.

Was bieten Aktivitäten und Fragmente wirklich?

  1. Lebenszyklusereignisse und Backstack
  2. Kontext und Ressourcen

Verwenden Sie sie deshalb dafür, NUR . Sie haben genug Verantwortung, erschweren sie nicht zu sehr. Ich würde argumentieren, dass sogar das Intantiieren einer Textansicht in einer Aktivität oder einem Fragment eine schlechte Praxis ist. Es gibt einen Grund, warum Methoden wie public View findViewById (int id) PUBLIC sind.

Jetzt wird die Frage einfacher: Brauche ich mehrere unabhängige Lebenszyklusereignisse und Backstacks? Wenn Sie denken, ja vielleicht, verwenden Sie Fragmente. Wenn Sie nie denken, verwenden Sie keine Fragmente.

Am Ende könnten Sie Ihren eigenen Backstack und Lebenszyklus erstellen. Aber warum das Rad nachbauen?

EDIT: Warum stimmen Sie dies ab? Single Purpose Classes Leute! Jede Aktivität oder jedes Fragment sollte in der Lage sein, einen Präsentator zu instanziieren, der eine Ansicht instanziiert. Der Präsentator und die Ansicht sind ein Modul, das ausgetauscht werden kann. Warum sollte eine Aktivität oder ein Fragment die Verantwortung eines Präsentators tragen?

16
beplaya

Vorteile

Sie können Ihre Fragmente von einer einzigen Aktivität aus steuern, da alle Fragmente unabhängig voneinander sind. Die Fragmente haben einen eigenen Lebenszyklus (onPause, onCreate, onStart...). Durch einen Lebenszyklus können Fragmente unabhängig auf Ereignisse reagieren, ihren Status über onSaveInstanceState speichern und zurückgerufen werden (d. H. Wenn sie nach einem eingehenden Anruf fortgesetzt werden oder wenn der Benutzer auf die Zurück-Schaltfläche klickt).

Nachteile

  1. Erstellen Sie Komplexität in Ihrem Code of Activity.
  2. Sie müssen die Reihenfolge der Fragmente verwalten.

Trotzdem ist es eine gute Idee, eine App zu erstellen, in der mehrere Ansichten angezeigt werden sollen. Auf diese Weise können Sie mehrere Fragmente in einer einzigen Ansicht anzeigen.

12

Dies hängt vom Designlayout Ihrer App ab. Angenommen, Sie verwenden Registerkarten in der Aktionsleiste im Entwurfslayout. In der Einzelaktivität der App können Fragmente geändert werden, indem Sie auf die Registerkarte klicken. Nun haben Sie eine Aktivität und nehmen an, drei Registerkarten in der Aktionsleiste und die Ansicht für die Registerkarten, die von den Fragmenten bereitgestellt werden, was die Verwaltung von Plus vereinfacht, ist ebenfalls möglich. Es hängt also alles vom Designschema Ihrer App ab und davon, wie Sie sich dafür entscheiden.

2
ASH

Vorteile:

  • Kann verwendet werden, um eine einzige Benutzeroberfläche zu erstellen, die von mehreren Bildschirmgrößen und -ausrichtungen über XML-Layouts verwendet werden kann.

Nachteile:

  • Erfordert komplexeren Code in Ihrer Aktivität.

Ich halte das für eine gute Idee, da die Verwendung unterschiedlicher XML-Layouts auf der Grundlage der aktuellen Bildschirmgröße und -ausrichtung die Benutzerfreundlichkeit der App verbessern und die Notwendigkeit verringern kann, mehrere Versionen Ihrer App freizugeben, wenn Sie vorhaben, Ihre App sowohl für Telefone als auch für Tablets freizugeben. Wenn Ihre App niemals sowohl von Tablets als auch von Handys verwendet wird, ist es die Mühe wahrscheinlich nicht wert.

1
Ski

Ich bin ein Befürworter der Aufschiebung der Inflation aller Sichtweisen in Fragmente, um eine bessere Flexibilität zu erreichen. Zum Beispiel mit einer einzelnen Landeaktivität für ein Tablet, das mehrere Fragmente aggregiert und dieselben Fragmente auf einem Telefon wiederverwendet, um einen Bildschirm pro Fragment anzuzeigen. In der Telefonimplementierung hätte ich jedoch für jeden Bildschirm eine separate Aktivität. Die Aktivitäten hätten nicht zu viel Code, da sie sich sofort ihrem Gegenstück für Fragmente zur Inflationsbetrachtung zuwenden würden.

Ich halte es für eine schlechte Idee, dass die Telefonimplementierung auf eine einzige Landing-Aktivität umgestellt werden muss, wenn Registerkarten oder ein Ausblendmenü eingeführt werden, da die Registerkarten- oder Menünavigation nur zu einem völlig neuen Bildschirm führt.

0
user1679130