Approfondir la compréhension setRetainInstance(vrai)
Ce exactement se produit lorsque vous appelez setRetainInstance(true)
sur un Fragment
? La documentation est quasi inexistante et cela semble être une fonction très importante. Plus précisément, je voudrais savoir comment une grande partie de cette séquence (que j'ai fait) est vrai:
- L'utilisateur fait pivoter l'appareil.
- Le fragment détaché de la
Activity
etFragment.onDetach()
est appelé.- L'activité est détruite;
Activity.onDestroy()
est appelé.- La
Activity
objet java est supprimé (lorsque cela est possible, par le GC).- Une nouvelle
Activity
objet java est créé; son constructeur, etonCreate()
sont appelés.- Dans
Activity.onCreate()
nous avonssetContentView(...)
qui définit un modèle contenant un fragment, ou nous utilisonsFragmentTransaction
pour ajouter un fragment.- Je ne suis vraiment pas sûr à ce sujet, mais je suppose que android est assez intelligent pour trouver la vieille fragment, et l'appel
Fragment.onAttach()
à
le rattacher à la nouvelleActivity
- Prochaine (ou avant? qui sait?)
Activity.onResume()
est appelé.
Donc, est-ce correct? Est Android assez intelligent pour trouver la vieille fragment, même si je utiliser explicitement FragmentTransaction.add(new MyFragment(), ...)
la première fois? Et si oui, comment puis-je éviter d'ajouter un autre fragment dans onCreate()
? Ai-je besoin de faire quelque chose comme ça?:
if (getSupportFragmentManager().findFragmentByTag("foo") == null)
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(new FooFragment(), "foo").commit();
}