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.

5voto

varg Punkte 61

Verwenden Sie eine Aktivität pro Anwendung, um die Basis für Fragment bereitzustellen. Verwenden Sie Fragment für Bildschirme. Fragments sind im Vergleich zu Aktivitäten leichtgewichtig. Fragmente sind wiederverwendbar. Fragmente sind besser geeignet für Apps, die sowohl auf dem Handy als auch auf dem Tablet unterstützt werden.

3voto

Franklin Hirata Punkte 290

Sie sind frei, eine davon zu verwenden.
Im Grunde genommen müssen Sie bewerten, welches das beste für Ihre App ist. Denken Sie darüber nach, wie Sie den Geschäftsablauf verwalten und Datenpräferenzen speichern/verwalten werden.

Denken Sie darüber nach, wie Fragmente Mülldaten speichern. Wenn Sie das Fragment implementieren, haben Sie eine Aktivitätsausgangspunkt, um mit Fragmenten zu füllen. Also, wenn Sie versuchen, viele Aktivitäten mit zu vielen Fragmenten zu implementieren, müssen Sie die Leistung Ihrer App berücksichtigen, da Sie (grob gesagt) zwei Kontextlebenszyklen manipulieren, denken Sie an die Komplexität.

Denken Sie daran: Sollte ich Fragmente verwenden? Warum sollte ich nicht?

Grüße.

2voto

Theo Punkte 2989

Ich verwende Fragmente für eine bessere Benutzererfahrung. Zum Beispiel, wenn Sie eine Schaltfläche haben und möchten, dass beim Klicken ein Webservice ausgeführt wird, hänge ich ein Fragment an die übergeordnete Aktivität an.

if (id == R.id.forecast) {

    ForecastFragment forecastFragment = new ForecastFragment();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.main_content, forecastFragment);
    ft.addToBackStack("backstack");
    forecastFragment.setArguments(b);
    ft.commit();
}

Auf diese Weise muss der Benutzer nicht in eine andere Aktivität wechseln.

Zum Zweiten ziehe ich Fragmente vor, weil man sie während der Rotation leicht handhaben kann.

2voto

Theo Punkte 2989

Es kommt wirklich darauf an, was du bauen möchtest. Zum Beispiel verwendet die Navigationsleiste Fragmente. Tabs verwenden auch Fragments. Eine weitere gute Implementierung ist, wenn du eine ListView hast. Wenn du das Telefon drehst und auf eine Zeile klickst, wird die Aktivität im verbleibenden Bildschirmbereich angezeigt. Persönlich verwende ich Fragments und Fragment-Dialoge, da es professioneller ist. Außerdem sind sie einfacher bei der Rotation zu handhaben.

1voto

Mansour Punkte 335

Einige falsche Ideen:

  • Setzen Sie immer eine Aktivität in Ihrer App und behandeln Sie verschiedene Bildschirme mit Fragmenten.
  • Schreiben Sie den UI-Code direkt in der Aktivität.
  • Behandeln Sie das Navigieren zwischen den Bildschirmen (ich meine nicht Tabs, sondern zum Beispiel Vollbildansichten) mit Fragmenten.
  • Aktivitäten können durch Fragmente ersetzt werden.

Hier ist die Sache!

Fragmente sind dazu gedacht, wiederverwendbare Teile der Benutzeroberfläche zu implementieren und sie an jedem beliebigen Ort der App zu verwenden, wo sie benötigt werden. Sie sind nicht dazu gedacht, Aktivitäten zu ersetzen.

Wann sollen wir jedes von ihnen verwenden?

  • Wenn wir einen unabhängigen Bildschirm haben, auf dem sich einige verschiedene UI-Teile befinden (Tabs, erweiterbare Bildschirme, Teilelemente usw...), sollten wir eine Aktivität mit einigen Fragmenten verwenden, um verschiedene UI-Teile separat im selben Bildschirm zu implementieren und zu behandeln.
  • Jeder unabhängige Teil der Anwendung ist tatsächlich eine Komponente, die konzep-tuell anders als andere Teile ist und eine eigene Aktivität haben muss. Zum Beispiel kann der Anmeldungs-teil einige verschiedene Szenarien enthalten, wie die Verwendung von Benutzername-Passwort oder die Verwendung von Fingerabdruck. Jedes Szenario kann durch ein Fragment implementiert werden und alle Anmeldungsfragmente sollen von der LoginActivity gehandhabt werden. Aber zum Beispiel hat der Teil der Bestellungen in der Anwendung keine konzep-tuelle Beziehung zur Anmeldung, also muss er eine eigene Aktivität haben und enthält natürlich einige Fragmente wie OrdersFragment, SubmitNewOrderFragment und usw., die alle von OrdersActivity verwaltet werden müssen.
  • Implementieren Sie nicht eine Benutzeroberfläche direkt in einer Aktivität. Implementieren Sie die Benutzeroberfläche immer in Fragmenten und fügen Sie diese in die Aktivität ein, auch wenn es nur ein Fragment in dieser Aktivität gibt. Dies hilft Ihnen, über wieder verwendbaren Code zu verfügen und UIs einfacher zu ändern.
  • Verwenden Sie niemals Fragmenten, um unendlich zu navigieren in der Anwendung, auch wenn Sie den Benutzer dazu zwingen, eine begrenzte Anzahl von Fragmenten im Back-Stack zu haben. Tatsache ist, dass wenn Sie ein neues Fragment in den Back-Stack hinzufügen und es entfernen, wird es nicht aus dem Speicher entfernt, es sei denn, die übergeordnete Aktivität wird zerstört und es ist nur unsichtbar. Also, wenn Sie den FragmentManager-Back-Stack verwenden, indem Sie mehr-mals zwischen Fragmenten in derselben Aktivität navigieren (besonders wenn Sie bei jeder Navigation ein neues Fragment erstellen und sie in den Back-Stack setzen), werden Sie eine OutOfMemoryException in der Anwendung erhalten.

Ich hoffe, dass es hilfreich ist.

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