628 Stimmen

Warum Fragmente, und wann sollte man Fragmente anstelle von Aktivitäten verwenden?

In Android API 11+ hat Google eine neue Klasse namens Fragment .

In den Videos schlägt Google vor, dass wann immer möglich ( Link1 , Link2 ), sollten wir Fragmente anstelle von Aktivitäten verwenden, aber sie haben nicht genau erklärt, warum.

Was ist der Zweck von Fragmenten und welche Verwendungsmöglichkeiten gibt es (abgesehen von einigen UI-Beispielen, die leicht durch einfache Ansichten/Layouts erreicht werden können)?

Meine Frage bezieht sich auf Fragmente:

  1. Wozu dient die Verwendung eines Fragments?
  2. Was sind die Vor- und Nachteile der Verwendung von Fragmenten im Vergleich zur Verwendung von Aktivitäten/Ansichten/Layouts?

Bonusfragen:

  1. Können Sie einige wirklich interessante Verwendungsmöglichkeiten für Fragmente nennen? Dinge, die Google in seinen Videos nicht erwähnt hat?
  2. Wie kommuniziert man am besten zwischen Fragmenten und den Aktivitäten, die sie enthalten?
  3. Was ist das Wichtigste bei der Verwendung von Fragmenten zu beachten? Gibt es Tipps und Warnungen aus Ihrer Erfahrung?

360voto

Glenn Bech Punkte 5948

Nr. 1 und Nr. 2: Welchen Zweck erfüllt die Verwendung eines Fragments? Vor- und Nachteile von Aktivitäten/Ansichten/Layouts?

Fragmente sind die Lösung von Android zur Erstellung wiederverwendbarer Benutzeroberflächen. Sie können einige der gleichen Dinge mit Aktivitäten und Layouts erreichen (z. B. durch die Verwendung von Includes). Allerdings sind Fragmente ab HoneyComb in die Android-API eingebunden. Lassen Sie mich das näher erläutern;

  • En ActionBar . Wenn Sie dort oben Registerkarten zum Navigieren in Ihrer App haben möchten, sehen Sie schnell, dass ActionBar.TabListener Schnittstelle bietet Ihnen eine FragmentTransaction als Eingangsargument für die onTabSelected Methode. Sie könnten dies wahrscheinlich ignorieren und etwas anderes und cleveres tun, aber Sie würden gegen die API arbeiten, nicht mit ihr.

  • En FragmentManager handhabt "zurück" für Sie auf sehr clevere Weise. Zurück bedeutet nicht zurück zur letzten Aktivität, wie bei normalen Aktivitäten. Es bedeutet zurück zum vorherigen Zustand des Fragments.

  • Sie können die coole ViewPager mit einer FragmentPagerAdapter um Swipe-Schnittstellen zu erstellen. Die FragmentPagerAdapter Code ist viel sauberer als ein regulärer Adapter und steuert die Instanziierung der einzelnen Fragmente.

  • Ihr Leben wird viel einfacher sein, wenn Sie Fragmente verwenden, wenn Sie versuchen, Anwendungen für Handys und Tablets zu erstellen. Da die Fragmente so eng mit den Honeycomb+-APIs verbunden sind, werden Sie sie auch auf Telefonen verwenden wollen, um Code wiederzuverwenden. Hier kommt die Kompatibilitätsbibliothek ins Spiel.

  • Sie können und sollten Fragmente sogar für Anwendungen verwenden, die nur für Telefone bestimmt sind. Wenn Sie Portabilität im Sinn haben. Ich verwende ActionBarSherlock und die Kompatibilitätsbibliotheken, um "ICS-ähnliche" Apps zu erstellen, die bis zur Version 1.6 gleich aussehen. Sie erhalten die neuesten Funktionen wie die ActionBar mit Registerkarten, Überlauf, geteilter Aktionsleiste, Viewpager usw.

Prämie 2

Das beste Mittel zur Kommunikation zwischen Fragmenten sind Intents. Wenn man etwas in einem Fragment drückt, ruft man normalerweise StartActivity() mit Daten darauf. Die Absicht wird an alle Fragmente der Aktivität, die Sie starten, weitergegeben.

85voto

Nikolay Elenkov Punkte 52201

Ich bin mir nicht sicher, auf welche(s) Video(s) Sie sich beziehen, aber ich bezweifle, dass dort gesagt wird, man solle Fragmente anstelle von Aktivitäten verwenden, da sie nicht direkt austauschbar sind. Es gibt tatsächlich eine ziemlich detaillierte Eingabe im Entwicklungshandbuch, lesen Sie es bitte für weitere Details.

Kurz gesagt, Fragmente leben in Aktivitäten, und jede Aktivität kann viele Fragmente beherbergen. Wie Aktivitäten haben sie einen bestimmten Lebenszyklus, im Gegensatz zu Aktivitäten sind sie keine Anwendungskomponenten der obersten Ebene. Zu den Vorteilen von Fragmenten gehören die Wiederverwendung von Code und die Modularität (z. B. die Verwendung derselben Listenansicht in vielen Aktivitäten), einschließlich der Möglichkeit, mehrteilige Oberflächen zu erstellen (vor allem auf Tablets nützlich). Der größte Nachteil ist die (etwas) höhere Komplexität. In der Regel können Sie dasselbe mit (benutzerdefinierten) Ansichten auf eine nicht standardisierte und weniger robuste Weise erreichen.

69voto

mani Punkte 3264

Ein Fragment ist ein Teil der Benutzeroberfläche oder des Verhaltens einer Anwendung, der in eine Aktivität eingefügt werden kann, was ein modulareres Aktivitätsdesign ermöglicht. Es ist nicht falsch, wenn wir sagen, dass ein Fragment eine Art Unteraktivität ist.

Die folgenden Punkte sind wichtig für ein Fragment:

  1. Ein Fragment hat sein eigenes Layout und sein eigenes Verhalten mit eigenen Lebenszyklus-Callbacks.

  2. Sie können Fragmente in einer Aktivität hinzufügen oder entfernen, während die Aktivität läuft.

  3. Sie können mehrere Fragmente in einer einzigen Aktivität kombinieren, um eine mehrteilige Benutzeroberfläche zu erstellen.

  4. Ein Fragment kann in mehreren Aktivitäten verwendet werden.

  5. Der Lebenszyklus des Fragments ist eng mit dem Lebenszyklus seiner Wirtsaktivität verbunden.

  6. Wenn die Aktivität pausiert wird, werden auch alle in der Aktivität verfügbaren Fragmente angehalten.

  7. Ein Fragment kann ein Verhalten implementieren, das keine Komponente der Benutzeroberfläche hat.

  8. Fragmente wurden der Android-API hinzugefügt in Android 3 (Honeycomb) mit API-Version 11.

Weitere Informationen finden Sie auf der offiziellen Website, Fragmente .

42voto

Aktivitäten sind die Vollbildkomponenten in der App mit der Symbolleiste, alles andere sind vorzugsweise Fragmente. Eine bildschirmfüllende übergeordnete Aktivität mit einer Symbolleiste kann mehrere Fenster, scrollbare Seiten, Dialoge usw. (alles Fragmente) enthalten, auf die alle von der übergeordneten Aktivität aus zugegriffen werden kann und die über die übergeordnete Aktivität kommunizieren.

Exemple :

Tätigkeit A, Tätigkeit B, Tätigkeit C:

  • Bei allen Aktivitäten muss derselbe Code wiederholt werden, um eine grundlegende Symbolleiste anzuzeigen, oder von einer übergeordneten Aktivität zu erben (wird mühsam zu verwalten).
  • Um von einer Aktivität zur anderen zu gelangen, müssen entweder alle im Speicher sein (Overhead) oder eine muss zerstört werden, damit die andere geöffnet werden kann.
  • Die Kommunikation zwischen Aktivitäten kann über Intents erfolgen.

gegen

Aktivität A, Fragment 1, Fragment 2, Fragment 3:

  • Keine Wiederholung von Code, alle Bildschirme haben Symbolleisten usw. aus dieser einen Aktivität.
  • Mehrere Möglichkeiten, von einem Fragment zum nächsten zu wechseln - Ansichtspager, Mehrfachfenster usw.
  • Die Aktivität hat die meisten Daten, so dass nur eine minimale Kommunikation zwischen den Fragmenten erforderlich ist. Falls dennoch erforderlich, kann dies problemlos über Schnittstellen erfolgen.
  • Fragmente müssen nicht bildschirmfüllend sein, sie lassen sich sehr flexibel gestalten.
  • Fragmente müssen das Layout nicht aufblasen, wenn Ansichten nicht erforderlich sind.
  • Mehrere Aktivitäten können das gleiche Fragment verwenden.

34voto

Kaveesh Kanwal Punkte 1731

Dies sind wichtige Informationen, die ich auf Fragmenten gefunden habe:

In der Vergangenheit wurde jeder Bildschirm in einer Android-App als separate Aktivität implementiert. Dies stellt eine Herausforderung bei der Weitergabe von Informationen zwischen Bildschirmen dar, da der Android Intent-Mechanismus die direkte Weitergabe eines Referenztyps (d. h. eines Objekts) zwischen Activities nicht zulässt. Stattdessen muss das Objekt serialisiert werden oder eine global zugängliche Referenz zur Verfügung gestellt werden.

Indem man jeden Bildschirm zu einem separaten F vollständig vermieden. Fragmente existieren immer im Kontext eines gegebenen Aktivität und können immer auf diese Aktivität zugreifen. Durch die Speicherung der Informationen innerhalb der Activity gespeichert werden, kann das Fragment für jedes Bildschirms einfach auf die Objektreferenz über die Activity zugreifen.

Quelle: https://www.pluralsight.com/blog/software-development/Android-fragments

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