La dénomination des méthodes de gestion des fragments est très déroutante même selon les ingénieurs de Google sur les babillards électroniques (voir les commentaires ci-dessus). Je me suis fait une petite démo pour comprendre comment les choses fonctionnent réellement. Voici mes conclusions. N'hésitez pas à me corriger si je me trompe.
Pour ajouter initialement un fragment à une activité, vous utilisez: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Cela associe l'activité au fragment et associe également une vue au fragment.
Voici les événements du cycle de vie qui en résultent et d'autres valeurs de retour de méthode importantes:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Pour supprimer un fragment d'une activité, vous utilisez: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Cela supprime toute association avec une vue ou une activité.
Voici les événements du cycle de vie qui en résultent et d'autres valeurs de retour de méthode importantes:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
J'ai rajouté le fragment ici
Pour détacher un fragment ajouté d'une activité, vous utilisez: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Cela supprime toute association avec une vue, mais conserve l'association avec l'activité.
Voici les événements du cycle de vie qui en résultent et d'autres valeurs de retour de méthode importantes:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Pour rattacher un fragment qui a été détaché à l'activité, utilisez: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Cela crée une nouvelle vue à associer au fragment et maintient l'association d'activité.
Voici les événements du cycle de vie qui en résultent et d'autres valeurs de retour de méthode importantes:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Autres choses importantes à noter: si vous détachez un fragment et que vous essayez de l'ajouter à nouveau en utilisant add () plutôt que attach (), rien ne semble changer.
si vous essayez d'ajouter un fragment qui a été supprimé à l'aide de remove () en utilisant attach () plutôt que add (), rien ne semble changer.
Lorsque getView () renvoie null, le fragment peut toujours avoir des références internes à la dernière vue qu'il a créée. Cette vue n'est plus valide et ne doit pas être utilisée.
Fragment
est détaché , sesonPause
,onStop
et lesonDestroyView
méthodes sont appelées uniquement (dans cet ordre). D'autre part, lorsqu'unFragment
est retiré , sesonPause
,onStop
,onDestroyView
,onDestroy
et lesonDetach
méthodes sont appelées (dans cet ordre). De même, lorsque la fixation , lesFragment
« sonCreateView
,onStart
et lesonResume
méthodes sont appelées uniquement; et quand l' ajout , lesFragment
« sonAttach
,onCreate
,onCreateView
,onStart
etonResume
méthodes sont appelées (dans cet ordre).