it-swarm.com.de

Warum Fragmente und wann werden Fragmente anstelle von Aktivitäten verwendet?

In Android API 11+ hat Google eine neue Klasse mit dem Namen Fragment veröffentlicht.

In den Videos schlägt Google vor, wann immer möglich ( link1 , link2 ) Fragmente anstelle von Aktivitäten zu 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 mit einfachen Ansichten/Layouts leicht erreicht werden können)?

Meine Frage betrifft Fragmente:

  1. Was sind die Zwecke der 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 Verwendungen für Fragmente nennen? Dinge, die Google in seinen Videos nicht erwähnt hat?
  2. Was ist der beste Weg, um zwischen Fragmenten und den Aktivitäten, die sie enthalten, zu kommunizieren?
  3. Was sind die wichtigsten Dinge, an die Sie denken sollten, wenn Sie Fragmente verwenden? Irgendwelche Tipps und Warnungen aus Ihrer Erfahrung?
439

# 1 & # 2 Was sind die Zwecke der Verwendung eines Fragments und welche Vor- und Nachteile hat die Verwendung von Fragmenten im Vergleich zur Verwendung von Aktivitäten/Ansichten/Layouts?

Fragmente sind die Lösung von Android zur Erstellung wiederverwendbarer Benutzeroberflächen. Sie können mit Aktivitäten und Layouts (z. B. mithilfe von Includes) einige der gleichen Ziele erreichen. Jedoch; Fragmente werden mit der Android API von HoneyComb und höher verbunden. Lassen Sie mich näher darauf eingehen.

  • Der ActionBar. Wenn Sie möchten, dass die Registerkarten dort oben in Ihrer App navigieren, sehen Sie schnell, dass die Schnittstelle ActionBar.TabListener einen FragmentTransaction als Eingabeargument für die Methode onTabSelected enthält. Sie könnten dies wahrscheinlich ignorieren und etwas anderes und kluges tun, aber Sie würden gegen die API arbeiten, nicht mit ihr.

  • Der FragmentManager behandelt "zurück" für Sie auf sehr clevere Weise. Zurück heißt nicht zurück zur letzten Aktivität, wie bei normalen Aktivitäten. Dies bedeutet, dass Sie zum vorherigen Fragmentzustand zurückkehren.

  • Sie können die coole ViewPager mit einer FragmentPagerAdapter verwenden, um Swipe-Schnittstellen zu erstellen. Der Code FragmentPagerAdapter ist viel übersichtlicher als ein regulärer Adapter und steuert die Instanziierungen der einzelnen Fragmente.

  • Ihr Leben wird viel einfacher, wenn Sie Fragmente verwenden, wenn Sie versuchen, Anwendungen für Handys und Tablets zu erstellen. Da die Fragmente mit den Honeycomb + -APIs verknüpft sind, möchten Sie sie auch auf Telefonen verwenden, um den Code wiederzuverwenden. Hier bietet sich die Kompatibilitätsbibliothek an.

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

Bonus 2

Der beste Weg, um zwischen Fragmenten zu kommunizieren, sind Absichten. Wenn Sie etwas in einem Fragment drücken, rufen Sie normalerweise StartActivity() mit Daten darauf auf. Die Absicht wird an alle Fragmente der Aktivität weitergegeben, die Sie starten.

261
Glenn Bech

Sie sind sich nicht sicher, auf welche Videos Sie sich beziehen, aber ich bezweifle, dass Sie Fragmente anstelle von Aktivitäten verwenden sollten, da diese nicht direkt austauschbar sind. Es gibt tatsächlich ein ziemlich genaues detaillierter Eintrag im Dev Guide, lesen Sie es für Details.

Kurz gesagt, Fragmente befinden sich in Aktivitäten, und jede Aktivität kann viele Fragmente hosten. 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 Fähigkeit, Schnittstellen mit mehreren Fenstern zu erstellen (meist nützlich auf Tablets). Der Hauptnachteil ist (einige) zusätzliche Komplexität. Im Allgemeinen können Sie dasselbe mit (benutzerdefinierten) Ansichten auf eine nicht standardmäßige und weniger robuste Weise erreichen.

67
Nikolay Elenkov

Ein Fragment ist ein Teil der Benutzeroberfläche oder des Verhaltens einer Anwendung, der in eine Aktivität eingefügt werden kann, um ein modulareres Aktivitätsdesign zu ermöglichen. Es wird nicht falsch sein, wenn wir sagen, dass ein Fragment eine Art von Subaktivität ist.

Es folgen wichtige Punkte zu einem Fragment:

  1. Ein Fragment hat ein eigenes Layout und ein eigenes Verhalten mit eigenen Lifecycle-Callbacks.

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

  3. Sie können mehrere Fragmente in einer einzelnen Aktivität kombinieren, um eine Benutzeroberfläche mit mehreren Fenstern zu erstellen.

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

  5. Der Fragment-Lebenszyklus hängt eng mit dem Lebenszyklus seiner Host-Aktivität zusammen.

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

  7. Ein Fragment kann ein Verhalten implementieren, das keine Benutzeroberflächenkomponente enthält.

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

Weitere Informationen finden Sie auf der offiziellen Website Fragmente.

45
mani

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

Bisher wurde jeder Bildschirm in einer Android App als separate Aktivität implementiert. Dies ist eine Herausforderung beim Übertragen von Informationen zwischen Bildschirmen, da der Android Intent-Mechanismus das direkte Übertragen eines Referenztyps (d. H. Eines Objekts) zwischen Aktivitäten nicht zulässt. Stattdessen muss das Objekt serialisiert oder eine global zugängliche Referenz zur Verfügung gestellt werden.

Indem Sie für jeden Bildschirm ein separates Fragment festlegen, werden Kopfschmerzen beim Übergeben von Daten vollständig vermieden. Fragmente existieren immer im Kontext einer bestimmten Aktivität und können immer auf diese Aktivität zugreifen. Durch Speichern der relevanten Informationen in der Aktivität kann das Fragment für jeden Bildschirm einfach über die Aktivität auf die Objektreferenz zugreifen.

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

16
Kaveesh Kanwal

Fragmente sind in einigen Fällen von besonderem Nutzen, z. B. wenn wir auf allen unseren Seiten eine Navigationsschublade haben möchten. Sie können ein Rahmenlayout mit einem beliebigen Fragment aufblasen und haben dennoch Zugriff auf die Navigationsleiste.

Wenn Sie eine Aktivität verwendet hätten, müssten Sie die Schublade bei allen Aktivitäten belassen, die zu redundantem Code führen. Dies ist eine interessante Verwendung eines Fragments.

Ich bin neu in Android und denke immer noch, dass ein Fragment auf diese Weise hilfreich ist.

7
Nithin Baby

Aktivitäten sind die Vollbildkomponenten in der App mit der Symbolleiste, alles andere sind vorzugsweise Fragmente. Eine übergeordnete Aktivität im Vollbildmodus mit einer Symbolleiste kann mehrere Bereiche, bildlauffähige Seiten, Dialogfelder usw. (alle Fragmente) enthalten, auf die alle vom übergeordneten Element aus zugegriffen werden kann und die über das übergeordnete Element kommunizieren.

Beispiel:

Aktivität A, Aktivität B, Aktivität C:

  • Bei allen Aktivitäten muss derselbe Code wiederholt werden, um beispielsweise eine grundlegende Symbolleiste anzuzeigen oder von einer übergeordneten Aktivität zu erben (die Verwaltung ist umständlich).
  • Um von einer Aktivität zur anderen zu wechseln, müssen sich entweder alle im Speicher befinden (Overhead) oder eine muss zerstört werden, damit die andere geöffnet werden kann.
  • Die Kommunikation zwischen Aktivitäten kann über Absichten erfolgen.

vs

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

  • Keine Code-Wiederholung, alle Bildschirme haben Symbolleisten usw. aus dieser einen Aktivität.
  • Verschiedene Möglichkeiten, um von einem Fragment zum nächsten zu wechseln - Pager, mehrere Fenster usw. anzeigen.
  • Die Aktivität enthält die meisten Daten, sodass nur eine minimale Kommunikation zwischen den Fragmenten erforderlich ist. Falls noch nötig, kann dies problemlos über Schnittstellen erfolgen.
  • Fragmente müssen nicht im Vollbildmodus angezeigt werden, da sie sehr flexibel gestaltet werden können.
  • Fragmente müssen das Layout nicht aufblasen, wenn keine Ansichten erforderlich sind.
  • Mehrere Aktivitäten können dasselbe Fragment verwenden.

Ich weiß, dass dies bereits zu Tode diskutiert wurde, aber ich möchte noch einige Punkte hinzufügen:

  • Mit Frags können Menus ausgefüllt und MenuItem Klicks selbst verarbeitet werden. So erhalten Sie weitere Modulationsmöglichkeiten für Ihre Aktivitäten. Sie können ContextualActionBar usw. ausführen, ohne dass Ihre Aktivität davon Kenntnis hat, und Sie können es grundsätzlich von den grundlegenden Aufgaben entkoppeln, die Ihre Aktivität ausführt (Navigation/Einstellungen/Info).

  • Ein übergeordnetes Frag mit untergeordneten Frags kann Ihnen weitere Optionen zum Modulieren Ihrer Komponenten geben. Z.B. Sie können ganz einfach Frags austauschen, neue Frags in einen Pager einfügen oder sie entfernen und neu anordnen. Alles ohne dass Ihre Aktivität etwas darüber weiß, sondern sich nur auf die Dinge auf höherer Ebene konzentriert.

4
einschnaehkeee

Ein Fragment lebt in einer Aktivität.

Während eine Aktivität von sich selbst lebt.

0
superkytoz

Fragmente lebt innerhalb der Aktivität und hat:

  • seinen eigenen Lebenszyklus
  • ein eigenes Layout
  • seine eigenen Kindfragmente und etc.

Stellen Sie sich Fragmente als Unteraktivität der Hauptaktivität vor, zu der sie gehören. Sie können nicht für sich existieren und sie können immer wieder aufgerufen/wiederverwendet werden. Hoffe das hilft :)

0
maniix

1.Zwecke eines Fragments?

  • Ans:
    1. Umgang mit Formfaktorunterschieden des Geräts.
    2. Weitergabe von Informationen zwischen App-Bildschirmen.
    3. Organisation der Benutzeroberfläche.
    4. Erweiterte UI-Metaphern.
0