Différence entre android.app.Fragment et android.support.v4.app.Fragment

175

Quelle est la différence entre android.app.Fragmentet android.support.v4.app.Fragmentet quelles sont les circonstances dans lesquelles chacun devrait être utilisé?

rayon
la source

Réponses:

289

android.support.v4.app.Fragmentest la classe Fragment dans la bibliothèque de support Android, qui est un package de compatibilité qui vous permet d'utiliser certaines des nouvelles fonctionnalités d'Android sur les anciennes versions d'Android.

android.app.Fragmentest la classe Fragment dans la version native du SDK Android. Il a été introduit dans Android 3 (API 11).

Si vous souhaitez que votre application utilise des fragments et que vous souhaitez cibler des appareils avant l'API 11, vous devez utiliser android.support.v4.app.Fragment. Cependant, si vous ciblez uniquement les appareils exécutant l'API 11 ou une version ultérieure, vous pouvez utiliser android.app.Fragment.

Edit: le système d'exploitation android.app.Fragment est désormais obsolète (à partir du niveau d'API 28), et tout le monde devrait passer à l'utilisation des implémentations de la bibliothèque de support.

Raghav Sood
la source
4
Voir également «Utilisation de FragmentStatePagerAdapter SANS bibliothèque de support»: stackoverflow.com/questions/18512294
...
Si vous remplacez onAttach (), veuillez consulter ce fil de discussion pour éviter qu'il ne soit pas appelé dans certaines circonstances avec android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong
3
utilisera Androidx: androidx.fragment.app.Fragment
Abhijit Kurane
56

À partir de 2018:

De la android.app.Fragment documentation :

Cette classe est obsolète au niveau de l'API 28.
Utilisez la bibliothèque de support Fragmentpour un comportement cohérent sur tous les appareils et un accès à Lifecycle.

Les fragments de support ( android.support.v4.app.Fragment) devraient donc être utilisés partout au lieu des fragments natifs ( android.app.Fragment) maintenant.

Artyom
la source
@Artyom, en tant que noob pour le développement Android, je m'attendais à ce que lorsque la android.app.Fragmentclasse soit obsolète, ce niveau d'API 28 ait une approche de remplacement alternative, éventuellement radicale. Existe-t-il une approche avant ou est-ce que cette approche rétrocompatible est android.support.v4.app.Fragmentla bonne approche?
ergohack le
1
@ergohack Voir les choses de cette façon: pour le code java, vous pouvez soit inclure le bytecode dans le runtime de l'appareil, soit dans le fichier jar de l'application. Le code de la bibliothèque de support sera placé dans votre fichier jar et fournira la même fonctionnalité que le code fourni à l'exécution.Il n'y a donc aucune raison de ne pas utiliser la bibliothèque de support moderne et maintenue au lieu du code vieillissant et non maintenu de votre téléphone cible.
Pierre
12

J'utilise android.support.v4.app.Fragmentexclusivement.

Toutes les applications que j'écris doivent être compatibles avec Android 2.3 et c'est le moyen le plus simple de le faire.

Si vous soutenez 11+, respectez-le android.app.Fragment.

Alex
la source
18
Dans ce cas, vous manquez de nombreuses fonctionnalités qui existent dans la bibliothèque de support, mais uniquement dans la bibliothèque native après un certain niveau d'API. getChildFragmentManager () par exemple n'est pas disponible avant le niveau 17. Mon conseil est de n'utiliser que le support Fragments et de faire comme si le natif n'existe pas.
Johan
4

Si votre application est ciblée pour l'API 11 ou supérieure, vous pouvez l'utiliser android.app.Fragmentet votre fichier APK sera plus petit.

Sinon, ajoutez la android.support.v4.app.Fragmentbibliothèque à votre projet afin de prendre en charge les anciennes versions d'API Android (Android 3.x).

Ahmad Payan
la source
2

android.support.v4.app.Fragment est une bibliothèque que vous pouvez utiliser pour obtenir une rétrocompatibilité avec une ancienne version d'API.

Des fragments ont été ajoutés au niveau de l'API 11 (avec d'autres fonctionnalités), vous devez inclure cette bibliothèque pour étendre ces fonctions aux appareils pré-API 11. C'est une bibliothèque utile et je suggère de jeter un œil à ActionBarSherlock, qui étend la barre d'action aux appareils pré-API v11.

MonkeyDroid
la source
-2

Si votre application est ciblée pour l'API 11 ou un niveau supérieur, vous pouvez utiliser android.app.Fragment et cela réduira la taille de l'APK. Sinon, utilisez android.support.v4.app.Fragment

vinod wickramasekara
la source