Was ist der Unterschied zwischen Fragment und FragmentActivity?
160
Meine Frage ist, abgesehen von den offensichtlichen Vererbungsunterschieden, was sind die Hauptunterschiede zwischen Fragmentund FragmentActivity? Für welche Szenarien ist jede Klasse am besten geeignet? Ich versuche zu verstehen, warum diese beiden Klassen existieren ...
A Fragmentist ein Abschnitt von a Activity, der Folgendes hat:
seinen eigenen Lebenszyklus
empfängt seine eigenen Eingabeereignisse
kann hinzugefügt oder entfernt werden, während das Activityläuft.
A Fragmentmuss immer in ein eingebettet sein Activity.
Fragmentssind nicht Teil der API vor HoneyComb (3.0). Wenn Sie Fragmentseine App verwenden möchten, die auf eine Plattformversion vor HoneyComb abzielt, müssen Sie das Support Package zu Ihrem Projekt hinzufügen und das verwenden FragmentActivity, um Ihre zu speichern Fragments. Die FragmentActivityKlasse verfügt über eine API für den Umgang mit Fragments, während die ActivityKlasse vor HoneyComb dies nicht tut.
Wenn Ihr Projekt nur auf HoneyComb oder eine neuere Version abzielt, sollten Sie Ihre verwenden Activityund nicht FragmentActivityhalten Fragments.
Ein paar Details:
Verwenden Sie android.app.Fragmentmit Activity. Verwenden Sie android.support.v4.app.Fragmentmit FragmentActivity. Fügen Sie das Support-Paket nicht Fragmentzu einem hinzu, Activityda sonst eine Ausnahme ausgelöst wird.
Seien Sie vorsichtig mit: FragmentManagerund LoaderManagerhaben Sie separate Support-Versionen für FragmentActivity:
Wenn Sie ein Fragmentin einem Activity(HoneyComb und höher) verwenden, rufen Sie an
//don't do this
myFragmentActivity.getLoaderManager();//instead do this:
myFragmentActivity.getSupportLoaderManager();
oder
//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()
Es ist auch nützlich zu wissen, dass ein Fragment zwar in ein eingebettet sein Activitymuss, aber nicht Teil des ActivityLayouts sein muss. Es kann als unsichtbarer Worker für die Aktivität ohne eigene Benutzeroberfläche verwendet werden.
Ein Fragment muss jedoch nicht Teil des Aktivitätslayouts sein. Sie können auch ein Fragment ohne eigene Benutzeroberfläche als unsichtbaren Worker für die Aktivität verwenden.
uzay95
1
@ uzay95 danke für den Hinweis. Ich habe am Ende einen Abschnitt hinzugefügt, um ihn zu erwähnen.
Gunnar Karlsson
@GunnarKarlsson Sollen wir fragmentActivity Fragment hinzufügen?
Dhasneem
2
@Dhasneem Sie fügen einer FragmentActivity ein Fragment hinzu, wenn Ihre App auf Android-Versionen unter 3.0 funktionieren soll. Andernfalls fügen Sie einer Aktivität ein Fragment hinzu.
Gunnar Karlsson
2
Vielen Dank! Das löst mein Problem! Jetzt weiß ich, warum meine App (geschrieben mit Aktivität) nach dem Hinzufügen der Facebook-Anmeldeschaltfläche immer bei onCreate abstürzt (in ihrem Beispiel wird android.support.v4.app.Fragment verwendet). Natürlich gibt es auch andere Gründe für den Absturz. Aber Ihre Antwort ist das letzte Stück, um sie zusammenzusetzen.
Chlind
14
FragmentActivity ist unsere klassische Aktivität mit Fragmentunterstützung, nichts weiter. Daher wird FragmentActivity benötigt, wenn ein Fragment an Activity angehängt wird.
Nun, Fragment ist eine gute Komponente, die das grundlegende Verhalten von Activity kopiert. Es ist immer noch keine eigenständige Anwendungskomponente wie Activity und muss an Activity angehängt werden, damit es funktioniert.
Übrigens, veraltete Antwort, die nur für Apps gilt, die auf Geräten arbeiten möchten, die älter als API 11 sind.
ToolmakerSteve
@ToolmakerSteve können Sie weitere Details bereitstellen? Können Sie die Antwort nach Möglichkeit mit der aktuellen Version bearbeiten?
Gökhan Barış Aker
8
Stellen Sie sich FragmentActivity als eine reguläre Aktivitätsklasse vor, die Fragmente unterstützen kann. Vor der Wabe konnte eine Aktivitätsklasse Fragmente nicht direkt unterstützen, daher ist dies bei Aktivitäten erforderlich, bei denen Fragmente verwendet werden.
Wenn Ihre Zielverteilung Honeycomb und darüber hinaus ist, können Sie stattdessen die Aktivität verlängern.
Auch ein Fragment ist als "Unteraktivität" zu betrachten. Es kann nicht ohne Aktivität existieren. Stellen Sie sich ein Fragment immer als Unteraktivität vor und Sie sollten gut sein. Die Aktivität wäre also das Elternteil und das Fragment (die Fragmente) die symbolische Beziehung des Kindes.
Eine FragmentActivity ist eine Ad-hoc-Aktivität, die Fragment enthält. In diesen wenigen Worten habe ich Ihnen eine der wichtigsten Änderungen erklärt, die das Android-Team mit Android 3.0 (HoneyComb) in das Android SDK eingefügt hat.
Mit diesem neuen Konzept werden Ihre Code- und Layoutelemente flexibler und wartbarer. Wenn Sie auf Google suchen, gibt es viele Beispiele.
FragmentActivity ist unsere klassische Aktivität mit Fragmentunterstützung, nichts weiter. Daher wird FragmentActivity benötigt, wenn ein Fragment an Activity angehängt wird.
Nun, Fragment ist eine gute Komponente, die das grundlegende Verhalten von Activity kopiert. Es ist immer noch keine eigenständige Anwendungskomponente wie Activity und muss an Activity angehängt werden, damit es funktioniert.
Weitere Details finden Sie hier
quelle
Stellen Sie sich FragmentActivity als eine reguläre Aktivitätsklasse vor, die Fragmente unterstützen kann. Vor der Wabe konnte eine Aktivitätsklasse Fragmente nicht direkt unterstützen, daher ist dies bei Aktivitäten erforderlich, bei denen Fragmente verwendet werden.
Wenn Ihre Zielverteilung Honeycomb und darüber hinaus ist, können Sie stattdessen die Aktivität verlängern.
Auch ein Fragment ist als "Unteraktivität" zu betrachten. Es kann nicht ohne Aktivität existieren. Stellen Sie sich ein Fragment immer als Unteraktivität vor und Sie sollten gut sein. Die Aktivität wäre also das Elternteil und das Fragment (die Fragmente) die symbolische Beziehung des Kindes.
quelle
Eine FragmentActivity ist eine Ad-hoc-Aktivität, die Fragment enthält. In diesen wenigen Worten habe ich Ihnen eine der wichtigsten Änderungen erklärt, die das Android-Team mit Android 3.0 (HoneyComb) in das Android SDK eingefügt hat.
Mit diesem neuen Konzept werden Ihre Code- und Layoutelemente flexibler und wartbarer. Wenn Sie auf Google suchen, gibt es viele Beispiele.
quelle