web-dev-qa-db-fra.com

Quelle est la différence entre Fragment et FragmentActivity?

Ma question est en dehors des différences évidentes d'héritage, quelles sont les principales différences entre Fragment et FragmentActivity ? A quels scénarios chaque classe est-elle la mieux adaptée? J'essaie de comprendre pourquoi ces deux classes existent ...

153
Kerry

A Fragment est une section d'un Activity, qui a:

  • son propre cycle de vie
  • reçoit ses propres événements d'entrée
  • peuvent être ajoutés ou supprimés pendant que Activity est en cours d'exécution.

Un Fragment doit toujours être incorporé dans un Activity.

Fragments ne fait pas partie de l'API avant HoneyComb (3.0). Si vous souhaitez utiliser Fragments dans une application ciblant une version de plate-forme antérieure à HoneyComb, vous devez ajouter le Support Package à votre projet et utiliser le FragmentActivity pour tenir votre Fragments. La classe FragmentActivity dispose d'une API permettant de traiter Fragments, alors que la classe Activity, antérieure à HoneyComb, n'en possède pas.

Si votre projet cible uniquement HoneyComb ou une version plus récente, vous devez utiliser Activity et non pas FragmentActivity pour conserver votre compte Fragments.

Quelques détails:

Utilisez Android.app.Fragment Avec Activity. Utilisez Android.support.v4.app.Fragment Avec FragmentActivity. N'ajoutez pas le package de support Fragment à un Activity car cela provoquerait une exception.

Une chose à laquelle il faut faire attention: FragmentManager et LoaderManager ont des versions de support distinctes pour FragmentActivity:

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

  • getFragmentManager() pour obtenir Android.app.FragmentManager
  • getLoaderManager() pour obtenir Android.app.LoaderManager

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

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

alors, 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 Activity, il ne doit pas nécessairement faire partie de la mise en page Activity. Il peut être utilisé en tant que travailleur invisible pour l'activité, sans aucune interface utilisateur.

275
Gunnar Karlsson

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 d’Activity. Il ne s’agit toujours pas d’un composant d’application autonome tel que Activity et doit être associé à Activity pour fonctionner.

Regardez ici pour plus de détails

14

Pensez à FragmentActivity comme à une classe d'activité régulière pouvant prendre en charge les fragments. Avant le nid d'abeille, une classe d'activité ne pouvait pas créer de fragments directement, c'est donc nécessaire pour les activités qui utilisent des fragments.

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

De plus, un fragment doit être considéré comme une "sous-activité". Il ne peut exister sans activité. Pensez toujours à un fragment en tant que sous-activité et vous devriez être bon. Ainsi, l'activité serait le parent et le (s) fragment (s) le type de relation symbolique enfant.

8
j2emanue

une FragmentActivity est une activité ad-hoc contenant Fragment. Dans ces quelques mots, je vous ai expliqué l’un des principaux changements importants qui, avec Android 3.0 (HoneyComb), Android a été insérée dans le Android sdk.

Avec ce nouveau type de concept, vos éléments de code et de présentation deviennent plus flexibles et faciles à gérer. Si vous recherchez sur google, il y a beaucoup d'exemples.

1