Unterschied zwischen android.app.Fragment und android.support.v4.app.Fragment

175

Was ist der Unterschied zwischen android.app.Fragmentund android.support.v4.app.Fragmentund unter welchen Umständen sollte jeder verwendet werden?

Strahl
quelle

Antworten:

288

android.support.v4.app.Fragmentist die Fragment- Klasse in der Android-Support-Bibliothek, ein Kompatibilitätspaket, mit dem Sie einige der neueren Funktionen von Android auf älteren Android-Versionen verwenden können.

android.app.Fragmentist die Fragment- Klasse in der nativen Version des Android SDK. Es wurde in Android 3 (API 11) eingeführt.

Wenn Sie möchten, dass Ihre App Fragmente verwendet und Geräte vor API 11 als Ziel festlegen möchten, müssen Sie diese verwenden android.support.v4.app.Fragment. Wenn Sie jedoch nur auf Geräte mit API 11 oder höher abzielen, können Sie diese verwenden android.app.Fragment.

Bearbeiten: Das Betriebssystem android.app.Fragment ist jetzt veraltet (ab API-Ebene 28), und jeder sollte die Implementierungen der Unterstützungsbibliothek verwenden.

Raghav Sood
quelle
4
Siehe auch "Verwenden von FragmentStatePagerAdapter OHNE Support-Bibliothek": stackoverflow.com/questions/18512294/…
CJBS
Wenn Sie onAttach () überschreiben, lesen Sie bitte diesen Thread, um zu vermeiden, dass er unter bestimmten Umständen nicht mit android.app aufgerufen wird.
Hong
3
wird Androidx verwenden: androidx.fragment.app.Fragment
Abhijit Kurane
56

Stand 2018:

Aus der android.app.Fragment Dokumentation :

Diese Klasse wurde in API-Ebene 28 nicht mehr unterstützt.
Verwenden Sie die Support-Bibliothek, Fragmentum ein konsistentes Verhalten auf allen Geräten und Zugriff auf Lifecycle zu gewährleisten.

Daher sollten Unterstützungsfragmente ( android.support.v4.app.Fragment) jetzt überall anstelle von nativen Fragmenten ( android.app.Fragment) verwendet werden.

Artyom
quelle
@Artyom, als Neuling in der Android-Entwicklung, erwartete ich android.app.Fragment, dass API-Level 28 , wenn die Klasse veraltet war, einen alternativen, möglicherweise radikalen Ersatzansatz haben würde. Gibt es einen Vorwärtsansatz oder ist dieser rückwärtskompatibel android.support.v4.app.Fragmentder richtige Ansatz?
Ergohack
1
@ergohack So sehen Sie es: Für Java-Code können Sie den Bytecode entweder in die Laufzeit des Geräts oder in die JAR-Datei der Anwendung aufnehmen. Der Code der Support-Bibliothek wird in Ihre JAR-Datei eingefügt und bietet dieselbe Funktion wie der zur Laufzeit bereitgestellte Code. Es gibt also keinen Grund, die moderne und gepflegte Support-Bibliothek nicht anstelle des veralteten und nicht gepflegten Codes Ihres Zieltelefons zu verwenden.
Pierre
12

Ich benutze android.support.v4.app.Fragmentausschließlich.

Alle Apps, die ich schreibe, müssen direkt für Android 2.3 unterstützt werden. Dies ist der einfachste Weg, dies zu tun.

Wenn Sie 11+ unterstützen, bleiben Sie dabei android.app.Fragment.

Alex
quelle
18
In diesem Fall verpassen Sie viele Funktionen, die in der Support-Bibliothek vorhanden sind, jedoch erst in der nativen nach einer bestimmten API-Ebene. getChildFragmentManager () zum Beispiel ist erst ab Stufe 17 verfügbar. Mein Rat ist, nur die Support-Fragmente zu verwenden und so zu tun, als ob das native nicht existiert.
Johan
4

Wenn Ihre Anwendung auf API 11 oder höher ausgerichtet ist, können Sie verwenden android.app.Fragmentund Ihre APK-Datei wird kleiner.

Andernfalls fügen Sie die android.support.v4.app.FragmentBibliothek Ihrem Projekt hinzu, um ältere Android-API-Versionen (Android 3.x) zu unterstützen.

Ahmad Payan
quelle
2

android.support.v4.app.Fragment ist eine Bibliothek, mit der Sie die Abwärtskompatibilität für ältere API-Versionen erhalten können.

Fragmente wurden auf API-Ebene 11 hinzugefügt (zusammen mit anderen Funktionen). Sie sollten diese Bibliothek einschließen, um diese Funktion auf Geräte vor API 11 zu erweitern. Dies ist eine nützliche Bibliothek, und ich empfehle einen Blick auf ActionBarSherlock, mit dem die Aktionsleiste auf Geräte vor der API v11 erweitert wird.

MonkeyDroid
quelle
-2

Wenn Ihre Anwendung auf API 11 oder höher ausgerichtet ist, können Sie android.app.Fragment verwenden, wodurch die APK-Größe verringert wird. Andernfalls verwenden Sie android.support.v4.app.Fragment

vinod wickramasekara
quelle