Quelle est la différence entre le détachement d'un Fragment et de l'enlever?
Dans l'Android docs pour un FragmentTransaction j'ai remarqué deux méthodes similaires: detach
et remove
. Les descriptions de plus, il ne semble pas fournir beaucoup de perspicacité sur l'utilisation de chacun, et de ce que je peut dire qu'ils semblent être les mêmes.
Donc: quelles sont les différences entre ces deux méthodes?
Vous devez vous connecter pour publier un commentaire.
Le détacher de la méthode supprime le fragment de l'INTERFACE utilisateur, mais son état est maintenu par le Fragment de Manager. Cela signifie que vous pouvez réutiliser ce fragment en appelant la méthode attach, avec une modification de ViewHierarchy
Supprimer désigne le fragment instance ne peut pas être rattaché. Vous devez l'ajouter à nouveau le fragment de transaction.
Source Commentaire
Vous remarquerez que lorsqu'un Fragment détaché, son onPause, onStop et onDestroyView méthodes sont appelées uniquement (dans cet ordre). D'autre part, lorsqu'un Fragment est supprimé, ses onPause, onStop, onDestroyView, onDestroy et onDetach méthodes sont appelées (dans cet ordre). De même, lors de la fixation, le Fragment de la onCreateView, onStart et onResume méthodes sont appelées uniquement; et lors de l'ajout, le Fragment de la onAttach, onCreate, onCreateView, onStart et onResume méthodes sont appelées (dans cet ordre). – Adil Hussain
Fragment
est détaché, sononPause
,onStop
etonDestroyView
méthodes sont appelées uniquement (dans cet ordre). D'autre part, lorsqu'unFragment
est supprimé, sononPause
,onStop
,onDestroyView
,onDestroy
etonDetach
méthodes sont appelées (dans cet ordre). De même, lors de la fixation, leFragment
'sonCreateView
,onStart
etonResume
méthodes sont appelées uniquement; et lorsque ajout, leFragment
'sonAttach
,onCreate
,onCreateView
,onStart
etonResume
méthodes sont appelées (dans cet ordre).De la dénomination du fragment méthodes de gestion sont très déroutant, même selon les ingénieurs Google sur les conseils de message (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 à corriger moi si je me trompe.
D'abord ajouter un Fragment d'une Activité, vous utilisez:
getFragmentManager().beginTransaction().ajouter(R. id.conteneur, mFragment).commit().
Cela associe l'Activité avec le Fragment et associe également d'une Vue avec le Fragment.
Ici sont les événements de cycle de vie et d'autres valeurs de retour des méthodes:
De retirer un Fragment d'une Activité, vous utilisez:
getFragmentManager().beginTransaction().supprimer(mFragment).commit().
Cela supprime toute association avec une Vue ou d'une Activité.
Ici sont les événements de cycle de vie et d'autres valeurs de retour des méthodes:
J'ai rajouté le fragment ici
De détacher un ajout Fragment d'une Activité, vous utilisez:
getFragmentManager().beginTransaction().détacher(mFragment).commit().
Cela supprime toute association avec une Vue, mais garde à l'association avec l'Activité.
Ici sont les événements de cycle de vie et d'autres valeurs de retour des méthodes:
Pour re-joindre un Fragment qui a été détaché de l'Activité, vous utilisez:
getFragmentManager().beginTransaction().attach(mFragment).commit().
Cela crée une nouvelle Vue à associer avec le Fragment et soutient l'Activité de l'association.
Ici sont les événements de cycle de vie et d'autres valeurs de retour des méthodes:
D'autres choses importantes à noter:
Si vous détacher un Fragment, puis essayez de l'ajouter de nouveau à l'aide de la méthode add() plutôt que de fixer(), rien ne semble changer.
si vous tentez d'ajouter un Fragment qui a été enlevé à l'aide d'remove() en utilisant attach() plutôt que d'en ajouter(), rien ne semble changer.
Quand getView() renvoie la valeur null, le Fragment peut encore avoir des références internes à la dernière Vue il a créé. Ce point de Vue n'est plus valide et ne doit pas être utilisé.