861 Stimmen

Dilemma: wann Fragmente vs. Aktivitäten verwenden:

Ich weiß, dass Aktivitäten dazu dienen, einen einzelnen Bildschirm meiner Anwendung darzustellen, während Fragments dazu bestimmt sind, wiederverwendbare UI-Layouts mit eingebetteter Logik darin zu sein.

Bis vor Kurzem habe ich eine Anwendung entwickelt, wie es verlangt wurde. Ich habe eine Aktivität erstellt, um einen Bildschirm meiner Anwendung darzustellen, und Fragmente für ViewPager oder Google Maps verwendet. Ich habe selten einen ListFragment oder ein anderes UI erstellt, das mehrmals wiederverwendet werden kann.

Kürzlich bin ich auf ein Projekt gestoßen, das nur aus 2 Aktivitäten besteht, eine ist eine SettingsActivity und die andere ist die MainActivity. Das Layout der MainActivity ist mit vielen versteckten Fullscreen-UI-Fragmenten gefüllt und nur eines wird angezeigt. In der Logik der Aktivität gibt es viele FragmentTransitions zwischen den verschiedenen Bildschirmen der Anwendung.

Was mir an diesem Ansatz gefällt, ist, dass durch die Verwendung einer ActionBar die Anwendung intakt bleibt und sich nicht mit der Bildschirmwechsel-Animation bewegt, was beim Wechsel von Aktivitäten passiert. Dies gibt den Bildschirmübergängen eine flüssigere Wirkung.

Also frage ich eigentlich, wie Ihr derzeit bei der Entwicklung vorgeht, was dieses Thema betrifft. Ich weiß, es mag auf den ersten Blick wie eine Meinungsfrage aussehen, aber ich betrachte es als eine Frage des Android-Designs und der Architektur... nicht wirklich eine Meinungsfrage.

UPDATE (01.05.2014): Nach dieser Präsentation von Eric Burke von Square, (die ich sagen muss, ist eine großartige Präsentation mit vielen nützlichen Tools für Android-Entwickler. Und ich habe keinerlei Verbindung zu Square)

http://www.infoq.com/presentations/Android-Design/

Aus meiner persönlichen Erfahrung der letzten Monate habe ich festgestellt, dass der beste Weg, meine Anwendungen zu erstellen, darin besteht, Gruppen von Fragmenten zu erstellen, die einen Fluss in der Anwendung darstellen und all diese Fragmente in einer Aktivität darzustellen. Im Grunde genommen haben Sie dann in Ihrer Anwendung die gleiche Anzahl von Aktivitäten wie die Anzahl der Flüsse. Auf diese Weise bleibt die Action Bar auf allen Bildschirmen des Flusses intakt, wird jedoch beim Wechsel eines Flusses neu erstellt, was viel Sinn macht. Wie Eric Burke sagt und wie ich auch erkannt habe, ist die Philosophie, so wenig Aktivitäten wie möglich zu verwenden, nicht in allen Situationen anwendbar, da sie ein Durcheinander in dem darstellt, was er die "God" Aktivität nennt.

15voto

Isaac Urbina Punkte 1287

In meiner Meinung ist es nicht wirklich relevant. Der Schlüsselfaktor zu berücksichtigen ist

  1. wie oft werden Sie Teile der Benutzeroberfläche wiederverwenden (zum Beispiel Menüs),
  2. ist die App auch für Tablets?

Der Hauptzweck von Fragmenten besteht darin, Multipane-Aktivitäten aufzubauen, was es perfekt für Tablet-/Telefone reaktive Apps macht.

13voto

guest Punkte 141

Vergessen Sie nicht, dass eine Aktivität ein Anwendungsblock/-komponente ist, der über Intent geteilt und gestartet werden kann! Daher sollte jede Aktivität in Ihrer Anwendung nur eine Art von Aufgabe lösen. Wenn Sie nur eine Aufgabe in Ihrer Anwendung haben, denke ich, dass Sie nur eine Aktivität und viele Fragmente benötigen, falls erforderlich. Natürlich können Sie Fragmente in zukünftigen Aktivitäten wiederverwenden, die andere Aufgaben lösen. Dieser Ansatz wird eine klare und logische Trennung der Aufgaben sein. Und Sie müssen keine Aktivität mit verschiedenen Intentfilterparametern für verschiedene Gruppen von Fragmenten pflegen. Sie definieren Aufgaben in der Entwurfsphase des Entwicklungsprozesses basierend auf den Anforderungen.

10voto

TheHebrewHammer Punkte 2840

Es steckt mehr dahinter, als du realisierst. Du musst daran denken, dass eine gestartete Aktivität die aufrufende Aktivität nicht implizit zerstört. Natürlich kannst du es so einrichten, dass dein Benutzer auf einen Button klickt, um zu einer Seite zu gelangen, du startest die Aktivität dieser Seite und zerstörst die aktuelle. Das verursacht jedoch viele Overheads. Der beste Rat, den ich dir geben kann, ist:

** Starte eine neue Aktivität nur, wenn es Sinn macht, die Hauptaktivität und diese gleichzeitig geöffnete zu haben (denke an mehrere Fenster).

Ein großartiges Beispiel, wann es Sinn macht, mehrere Aktivitäten zu haben, ist Google Drive. Die Hauptaktivität bietet einen Datei-Explorer. Wenn eine Datei geöffnet wird, wird eine neue Aktivität gestartet, um diese Datei anzuzeigen. Du kannst auf die Schaltfläche für die zuletzt verwendeten Apps drücken, die es dir ermöglicht, zurück zum Browser zu gehen, ohne das geöffnete Dokument zu schließen, dann vielleicht sogar ein weiteres Dokument parallel zum ersten öffnen.

9voto

I Love Coding Punkte 333

Was ich gemacht habe: Weniger Fragment verwenden, wenn möglich. Leider ist es in fast jedem Fall möglich. Also endete ich mit vielen Fragmenten und wenig Aktivitäten. Einige Nachteile, die ich bemerkt habe:

  • ActionBar & Menü: Wenn 2 Fragmente unterschiedliche Titel, Menüs haben, ist es schwierig damit umzugehen. Zum Beispiel, wenn ein neues Fragment hinzugefügt wird, kann man den ActionBar-Titel ändern, aber wenn es vom BackStack entfernt wird, gibt es keine Möglichkeit, den alten Titel wiederherzustellen. Du könntest für diesen Fall eine Toolbar in jedem Fragment benötigen, aber glaub mir, das wird mehr Zeit kosten.
  • Wenn wir startForResult benötigen, hat die Aktivität sie, aber das Fragment nicht.
  • Es gibt standardmäßig keine Übergangsanimationen.

Meine Lösung dafür ist, eine Aktivität zu verwenden, um ein Fragment darin zu verpacken. So haben wir separate Action Bar, Menü, startActivityForResult, Animationen...

6voto

Sanchit Bhasin Punkte 61

Der große Vorteil eines Fragment gegenüber einer Aktivität ist, dass der Code, der für das Fragment verwendet wird, für verschiedene Aktivitäten verwendet werden kann. Somit ermöglicht es die Wiederverwendbarkeit von Code in der Anwendungs­entwicklung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X