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.

308voto

sandalone Punkte 40194

Experten werden Ihnen sagen: "Wenn ich die Benutzeroberfläche sehe, werde ich wissen, ob ich eine Activity oder ein Fragment verwenden soll." Am Anfang ergibt dies vielleicht keinen Sinn, aber mit der Zeit werden Sie tatsächlich erkennen können, ob Sie ein Fragment benötigen oder nicht.

Es gibt eine gute Praxis, die ich sehr hilfreich finde. Sie ist mir eingefallen, als ich versuchte, meiner Tochter etwas zu erklären.

Stellen Sie sich eine Box vor, die einen Bildschirm darstellt. Können Sie einen anderen Bildschirm in diese Box laden? Wenn Sie eine neue Box verwenden, müssen Sie mehrere Elemente von der ersten Box kopieren? Wenn die Antwort Ja lautet, sollten Sie Fragments verwenden, denn die Wurzel-Activity kann alle duplizierten Elemente halten, um Zeit bei deren Erstellung zu sparen, und Sie können einfach Teile der Box ersetzen.

Aber vergessen Sie nicht, dass Sie immer einen Box-Container (Activity) benötigen, sonst werden Ihre Teile zerstreut. Also eine Box mit Teilen darin.

Achten Sie darauf, die Box nicht falsch zu verwenden. Android UX-Experten raten (Sie können sie auf YouTube finden), wann wir explizit eine andere Activity laden sollten, anstatt ein Fragment zu verwenden (zum Beispiel wenn wir es mit dem Navigations-Drawer zu tun haben, der Kategorien enthält). Sobald Sie sich mit Fragments wohl fühlen, können Sie sich alle ihre Videos ansehen. Noch wichtiger ist, dass sie verpflichtendes Material sind.

Können Sie jetzt auf Ihre Benutzeroberfläche schauen und feststellen, ob Sie eine Activity oder ein Fragment benötigen? Haben Sie eine neue Perspektive gewonnen? Ich denke schon.

154voto

Meine Philosophie ist folgende:

Erstelle eine Aktivität nur, wenn es absolut erforderlich ist. Da der Back Stack für das Durchführen von Bündeln von Fragment-Transaktionen verfügbar ist, versuche ich, so wenige Aktivitäten wie möglich in meiner App zu erstellen. Außerdem ist die Kommunikation zwischen verschiedenen Fragmenten viel einfacher als das Hin- und Hersenden von Daten zwischen Aktivitäten.

Aktivitätsübergänge sind teuer, nicht wahr? Zumindest glaube ich das - da die alte Aktivität zerstört/pausiert/angehalten werden muss, auf den Stack geschoben wird und dann die neue Aktivität erstellt/gestartet/wiederaufgenommen werden muss.

Das ist einfach meine Philosophie, seit Fragmente eingeführt wurden.

72voto

android developer Punkte 111449

Nun, laut den Vorträgen von Google (vielleicht hier, ich erinnere mich nicht) sollte man immer Fragmente verwenden, wenn es möglich ist, da dies den Code einfacher zu warten und zu kontrollieren macht.

Ich denke jedoch, dass es in manchen Fällen zu komplex werden kann, da die Aktivität, die die Fragmente hostet, zwischen ihnen navigieren/kommunizieren muss.

Ich denke, dass du selbst entscheiden solltest, was für dich am besten ist. Es ist normalerweise nicht so schwer, eine Aktivität in ein Fragment umzuwandeln und umgekehrt.

Ich habe einen Beitrag zu diesem Dilemma erstellt hier, falls du weiterlesen möchtest.

45voto

Francis Punkte 5753

Seit Jetpack ist die Single-Activity-App die bevorzugte Architektur. Besonders nützlich ist dies mit dem Navigationsarchitektur-Komponente.

Quelle

34voto

Qylin Punkte 1393

Warum ich Fragment in ALLEN FÄLLEN Activity vorziehe.

  • Activity ist teuer. In Fragment werden Ansichten und Eigenschaftszustände getrennt - wann immer ein Fragment im Backstack ist, werden seine Ansichten zerstört. So können Sie viel mehr Fragmente als Activity stapeln.

  • Backstack-Manipulation. Mit dem FragmentManager ist es einfach, alle Fragmente zu löschen, mehr als ein Fragment einzufügen und so weiter. Aber für Activity wird es ein Albtraum sein, diese Dinge zu manipulieren.

  • Ein viel vorhersehbarer Lebenszyklus. Solange die Host-Activity nicht recycelt wird, werden die Fragmente im Backstack nicht recycelt. Daher ist es möglich, FragmentManager::getFragments() zu verwenden, um ein bestimmtes Fragment zu finden (nicht empfohlen).

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