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 ...
A Fragment
est une section d'un Activity
, qui a:
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.
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
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.
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.