Quelle est la différence entre Fragment et FragmentActivity?

Réponses:

280

A Fragmentest une section d'un Activity, qui a:

  • son propre cycle de vie
  • reçoit ses propres événements d'entrée
  • peut être ajouté ou supprimé pendant l' Activityexécution de.

Un Fragmentdoit toujours être intégré dans un fichier Activity.

Fragmentsne font pas partie de l'API avant HoneyComb (3.0). Si vous souhaitez utiliser Fragmentsdans une application ciblant une version de plate-forme antérieure à HoneyComb, vous devez ajouter le Support Package à votre projet et utiliser le FragmentActivitypour contenir votre Fragments. La FragmentActivityclasse a une API pour traiter Fragments, alors que la Activityclasse, avant HoneyComb, n'en a pas.

Si votre projet cible HoneyComb ou une version plus récente uniquement, vous devez utiliser Activityet ne FragmentActivitypas conserver votre fichier Fragments.

Quelques détails:

Utiliser android.app.Fragmentavec Activity. Utiliser android.support.v4.app.Fragmentavec FragmentActivity. N'ajoutez pas le package de support Fragmentà un Activitycar cela entraînera la levée d'une exception.

Une chose à faire attention: FragmentManageret LoaderManageravoir des versions de support distinctes pour FragmentActivity:

Si vous utilisez un Fragmentdans un Activity(HoneyComb et plus), appelez

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

si vous utilisez un Fragmentdans un FragmentActivity(pré-HoneyComb), appelez:

  • getSupportFragmentManager()pour obtenir android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() obtenir android.support.v4.app.LoaderManager

donc, ne pas faire

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

ou

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Il est également utile de savoir que même si un fragment doit être incorporé dans un, Activityil ne doit pas nécessairement faire partie de la Activitymise en page. Il peut être utilisé comme un travailleur invisible pour l'activité, sans interface utilisateur propre.

Gunnar Karlsson
la source
6
Cependant, il n'est pas nécessaire qu'un fragment fasse partie de la présentation de l'activité; vous pouvez également utiliser un fragment sans sa propre interface utilisateur en tant que travailleur invisible pour l'activité.
uzay95
1
@ uzay95 merci d'avoir signalé cela. J'ai ajouté une section à la fin pour le mentionner.
Gunnar Karlsson
@GunnarKarlsson Allons-nous ajouter fragment à fragmentActivity?
Dhasneem
2
@Dhasneem Vous ajoutez un Fragment à FragmentActivity si vous souhaitez que votre application fonctionne sur les versions d'Android inférieures à 3.0. Sinon, vous ajoutez un fragment à une activité.
Gunnar Karlsson
2
Merci! Cela résout mon problème! Maintenant, je sais pourquoi mon application (écrite avec Activity) plante toujours à onCreate après l'ajout du bouton de connexion Facebook (ils utilisent android.support.v4.app.Fragment dans leur exemple). Bien sûr, il y a aussi une autre raison à l'accident. Mais votre réponse est la dernière pièce pour les assembler.
Chlind
14

FragmentActivity est notre activité classique avec prise en charge des fragments, rien de plus. Par conséquent, FragmentActivity est nécessaire, lorsqu'un fragment sera attaché à Activity.

Well Fragment est un bon composant qui copie les comportements de base de Activity, mais pas encore un composant d'application autonome comme Activity et doit être attaché à Activity pour fonctionner.

Regardez ici pour plus de détails

Gökhan Barış Aker
la source
1
BTW, réponse obsolète, qui ne s'applique qu'aux applications qui souhaitent fonctionner sur des appareils plus anciens que l'API 11.
ToolmakerSteve
@ToolmakerSteve pouvez-vous fournir plus de détails? Si possible, pouvez-vous modifier la réponse avec une version à jour?
Gökhan Barış Aker
8

Considérez FragmentActivity comme une classe Activity régulière qui peut prendre en charge les fragments. Avant le nid d'abeille, une classe d'activité ne pouvait pas superviser directement les fragments, c'est donc nécessaire dans les activités qui utilisent des fragments.

Si votre distribution cible est Honeycomb et au-delà, vous pouvez étendre l'activité à la place.

Un fragment doit également être considéré comme une «sous-activité». Il ne peut exister sans activité. Considérez toujours un fragment comme une sous-activité et vous devriez être bon. Ainsi, l'activité serait le parent et le (s) fragment (s) le type de relation symbolique enfant.

j2emanue
la source
1

a FragmentActivity est une activité ad hoc qui contient Fragment. En ces quelques mots, je vous explique l'un des principaux changements importants que, avec Android 3.0 (HoneyComb), l'équipe Android a inséré dans le sdk android.

Avec ce nouveau type de concept, vos morceaux de code et de mise en page deviennent plus flexibles et maintenables. Si vous effectuez une recherche sur Google, il existe de nombreux exemples.

Simone Casagranda
la source