Ma question est en dehors des différences évidentes héritage, quelles sont les principales différences entre `` et `` ? À quels scénarios sont chaque classe mieux adaptée ? J’essaie d’obtenir une compréhension de pourquoi ces deux classes existent...
Réponses
Trop de publicités?Un Fragment
d' Activity
, ce qui a:
- son propre cycle de vie
- reçoit ses propres événements d'entrée
- peuvent être ajoutés ou retirés lorsque l'
Activity
est en cours d'exécution.
Un Fragment
doit toujours être incorporé dans une Activity
.
Fragments
ne font pas partie de l'API avant HoneyComb (3.0). Si vous souhaitez utiliser Fragments
dans une application ciblant une version de la plateforme avant en Nid d'abeille, vous devez ajouter le Paquet de Soutien à votre projet et à l'utilisation de l' FragmentActivity
pour tenir votre Fragments
. L' FragmentActivity
classe a une API pour traiter Fragments
, alors que l' Activity
classe, avant en Nid d'abeille, n'est-ce pas.
Si votre projet est de ciblage en Nid d'abeille ou plus récent, vous devez utiliser Activity
et pas FragmentActivity
pour tenir votre Fragments
.
Quelques détails:
Utiliser android.app.Fragment
avec Activity
. Utiliser android.support.v4.app.Fragment
avec FragmentActivity
. Ne pas ajouter le support package Fragment
d'un Activity
qu'il sera la cause de la levée d'une Exception.
Une chose à être prudent avec: FragmentManager
et LoaderManager
ont séparé en charge des versions pour FragmentActivity:
Si vous utilisez un Fragment
en Activity
(Nid d'abeille), appel
-
getFragmentManager()
pour obtenir de l'android.app.FragmentManager
-
getLoaderManager()
pour obtenir de l'android.app.LoaderManager
si vous utilisez un Fragment
en FragmentActivity
(pré-Nid d'abeille), composez le:
-
getSupportFragmentManager()
pour obtenir de l'android.support.v4.app.FragmentManager
. -
getSupportLoaderManager()
pour obtenir de l'android.support.v4.app.LoaderManager
donc, ne pas faire
myFragmentActivity.getLoaderManager()//don't do this, do myFragmentActivity.getSupportLoaderManager()
ou
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()//don't do this, do android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()
Aussi utile de savoir est que, si un fragment doit être incorporé dans une Activity
il n'a pas à faire partie de l' Activity
mise en page. Il peut être utilisé comme un travailleur invisible pour l'activité, sans INTERFACE utilisateur de son propre.
FragmentActivity est notre activité classique avec le support des fragments, rien de plus. Par conséquent, FragmentActivity est nécessaire lorsqu'un fragment est associé à Activity.
Bien Fragment est un bon composant qui copie les comportements de base de l’activité, mais qui n’est pas un composant d’application autonome tel que Activity et qui doit être associé à Activity pour fonctionner.
Regardez ici pour plus de détails
Pensez à FragmentActivity comme une Activité régulière dans la classe qui peut supporter des Fragments. Avant en nid d'abeille, une activité de classe ne pouvait pas supoprt Fragments directement, de sorte que ce qui est nécessaire dans les activités qui utilisent des Fragments.
Si votre distribution cible est en Nid d'abeille et au-delà, vous pouvez étendre l'arrêt de l'Activité à la place.
Aussi un fragment doit être considéré comme un "sous-activité". Il ne peut pas exister sans une activité. Toujours penser à un fragment comme une sous-activité et vous devriez être bon. L'activité serait le parent et le fragment(s) de l'enfant type de relation symbolique.
un FragmentActivity est une activité ad hoc contenant un fragment. Dans ces quelques mots, je vous ai expliqué 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 éléments de code et de mise en page deviennent plus flexibles et maintenables. Si vous effectuez une recherche sur Google, il y a beaucoup d'exemples.