Android - Ich benötige einige Erläuterungen zu Fragmenten und Aktivitäten und Ansichten


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 ), Fragmente anstelle von Aktivitäten verwendet werden sollten, aber sie haben nicht genau erklärt, warum.

Was ist der Zweck von Fragmenten und einigen möglichen Anwendungen von ihnen (außer einigen UI-Beispielen, die leicht durch einfache Ansichten / Layouts erreicht werden können)?

Meine Frage ist über 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 / Views / Layouts?

Bonusfragen:

  1. Können Sie wirklich interessante Verwendungen für Fragmente geben? Dinge, die Google in ihren Videos nicht erwähnt hat?
  2. Wie kommuniziert man am besten zwischen Fragmenten und den Aktivitäten, die sie enthalten?
  3. Was sind die wichtigsten Dinge, an die Sie sich erinnern müssen, wenn Sie Fragmente verwenden? Irgendwelche Tipps und Warnungen aus Ihrer Erfahrung?

Answers



# 1 & # 2 Was sind die Zwecke der Verwendung eines Fragments und was sind die Vor- und Nachteile der Verwendung von Fragmenten im Vergleich zur Verwendung von Aktivitäten / Views / 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 (zum Beispiel mit Includes). Jedoch; Fragmente sind in der Android-API von HoneyComb und höher eingebunden. Lassen Sie mich das näher ausführen.

  • Die ActionBar Wenn Sie möchten, dass Tabs dort oben in Ihrer App navigieren, sehen Sie schnell, dass die ActionBar.TabListener Schnittstelle eine FragmentTransaction als Eingabeargument für die onTabSelected Methode onTabSelected . 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 auf eine sehr clevere Art und Weise «zurück» für Sie. Zurück bedeutet nicht zurück zur letzten Aktivität, wie bei normalen Aktivitäten. Es bedeutet zurück zum vorherigen Fragmentzustand.

  • Sie können den coolen ViewPager mit einem FragmentPagerAdapter , um Swipe-Interfaces zu erstellen. Der FragmentPagerAdapter Code ist viel sauberer 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 Telefone und Tablets zu erstellen. Da die Fragmente so eng mit den Honeycomb + APIs verknüpft sind, sollten Sie sie auch auf Telefonen verwenden, um Code wiederzuverwenden. Das ist, wo die Kompatibilitätsbibliothek nützlich ist.

  • Sie könnten und sollten sogar Fragmente für Apps verwenden, die nur für Handys gedacht sind. Wenn Sie an Portabilität denken. Ich verwende ActionBarSherlock und die Kompatibilitätsbibliotheken, um "ICS-schauende" 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.

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.




  1. Fragment ist ein Teil einer Aktivität, die ihre eigene Benutzeroberfläche zu dieser Aktivität beiträgt. Fragment kann wie eine Unteraktivität gedacht werden. Wo der gesamte Bildschirm, mit dem der Benutzer interagiert, als Aktivität bezeichnet wird. Eine Aktivität kann mehrere Fragmente enthalten. Fragmente sind meist ein Teil einer Aktivität.

  2. Eine Aktivität kann 0 oder mehrere Fragmente enthalten, basierend auf der Bildschirmgröße. Ein Fragment kann in mehreren Aktivitäten wiederverwendet werden, sodass es sich wie eine wiederverwendbare Komponente in Aktivitäten verhält.

  3. Ein Fragment kann nicht unabhängig existieren. Es sollte immer Teil einer Aktivität sein. Wo als Aktivität kann ohne irgendein Fragment darin bestehen.




Sie sind sich nicht sicher, auf welche Videos Sie sich beziehen, aber ich bezweifle, dass sie sagen, dass Sie Fragmente anstelle von Aktivitäten verwenden sollten, weil sie nicht direkt austauschbar sind. Es gibt einen ziemlich detaillierten Eintrag im Dev Guide, lesen Sie ihn bitte für Details.

Kurz gesagt, leben Fragmente 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 Modularität (z. B. die Verwendung der gleichen Listenansicht in vielen Aktivitäten), einschließlich der Möglichkeit zum Erstellen von Mehrfachschnittstellen-Schnittstellen (meist nützlich auf Tablets). Der Hauptnachteil ist (etwas) zusätzliche Komplexität. Im Allgemeinen können Sie dasselbe mit (benutzerdefinierten) Ansichten auf nicht standardmäßige und weniger robuste Weise erreichen.




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

Es folgen wichtige Punkte zu einem Fragment:

  1. Ein Fragment hat sein eigenes Layout und sein eigenes Verhalten mit seinen eigenen Lebenszyklus-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 mehrteilige Benutzeroberfläche zu erstellen.

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

  5. Der Fragmentlebenszyklus ist eng mit dem Lebenszyklus seiner Hostaktivität verknüpft.

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

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

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

Für weitere Informationen besuchen Sie bitte die offizielle Website, Fragmente .




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

Historisch wurde jeder Bildschirm in einer Android-App als separate Aktivität implementiert. Dies führt zu einer Herausforderung bei der Übergabe von Informationen zwischen Bildschirmen, da der Android Intent-Mechanismus das direkte Übergeben eines Referenztyps (dh eines Objekts) zwischen Aktivitäten nicht zulässt. Stattdessen muss das Objekt serialisiert oder eine global zugängliche Referenz verfügbar gemacht werden.

Indem jeder Bildschirm zu einem separaten Fragment gemacht wird, wird dieser Datenübertragungs-Kopfschmerz vollständig vermieden. Fragmente existieren immer im Kontext einer bestimmten Aktivität und können immer auf diese Aktivität zugreifen. Durch das Speichern der Informationen von Interesse innerhalb der Aktivität kann das Fragment für jeden Bildschirm einfach über die Aktivität auf die Objektreferenz zugreifen.




Fragmente sind in einigen Fällen von besonderem Nutzen, z. B. wenn wir eine Navigationsleiste auf allen unseren Seiten behalten möchten. Sie können ein Frame-Layout mit einem beliebigen Fragment aufblähen und trotzdem auf die Navigationsleiste zugreifen.

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

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




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

  • Frags können zum MenuItem Menu und können MenuItem Klicks auf eigene Faust verarbeiten. Dadurch ergeben sich weitere Modulationsmöglichkeiten für Ihre Aktivitäten. Sie können ContextualActionBar-Sachen und so weiter machen, ohne dass Ihre Aktivität darüber Bescheid weiß, und Sie können es grundsätzlich von den grundlegenden Dingen abkoppeln, die Ihre Aktivität behandelt (Navigation / Einstellungen / Info).

  • Ein Eltern-Frag mit Kind-Frags kann Ihnen weitere Optionen zur Modulation Ihrer Komponenten geben. ZB kann man Frags leicht austauschen, neue Frags in einen Pager legen oder entfernen, neu anordnen. Alles ohne deine Aktivität, wenn du etwas darüber weißt, dich nur auf das höhere Level konzentrieren.




Ein Fragment lebt in einer Aktivität.

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




Fragmente leben innerhalb der Aktivität und haben:

  • sein eigener Lebenszyklus
  • eigenes Layout
  • seine eigenen Kindfragmente und usw.

Denken Sie an Fragmente als eine Unteraktivität der Hauptaktivität, zu der es gehört, es kann nicht von selbst existieren und es kann immer wieder aufgerufen / wiederverwendet werden. Hoffe das hilft :)




1.Was sind die Zwecke der Verwendung eines Fragments?

  • Antwort:
    1. Umgang mit Geräteformfaktor-Unterschieden
    2. Weitergabe von Informationen zwischen App-Bildschirmen
    3. Organisation der Benutzeroberfläche
    4. Erweiterte UI-Metaphern.