Was ist der Unterschied zwischen Fragment und FragmentActivity?


Antworten:


280

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

  • getFragmentManager() bekommen android.app.FragmentManager
  • getLoaderManager() bekommen android.app.LoaderManager

Wenn Sie a Fragmentin a FragmentActivity(vor HoneyComb) verwenden, rufen Sie an:

  • getSupportFragmentManager()zu bekommen android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() bekommen android.support.v4.app.LoaderManager

so, nicht tun

//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.


6
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.

Weitere Details finden Sie hier


1
Ü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.


1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.