web-dev-qa-db-fra.com

Fragments Android: Quand utiliser masquer/afficher ou ajouter/supprimer/remplacer?

Supposons que je souhaite remplacer le fragment actuel dans une vue conteneur par un autre. Est-il préférable d'utiliser remplacer ...

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, null);
    ft.commit();

... ou le suivant, avec show and hide?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.hide(oldFragment);
    ft.show(newFragment);
    ft.commit();

Une façon de faire cela est-elle plus efficace? Vous ne trouvez pas beaucoup d’informations sur le moment où utiliser ces méthodes, ou sur la manière dont elles affectent le cycle de vie des fragments impliqués . Merci!

107
Robert Karl

Vous devez envisager ce que vous prévoyez de faire avec le fragment pour décider du chemin à suivre. Si vous utilisez une opération FragmentTransaction pour masquer le fragment, il peut toujours être dans l'état de son cycle de vie en cours d'exécution, mais son interface utilisateur a été détachée de la fenêtre et n'est donc plus visible. Donc, techniquement, vous pouvez toujours interagir avec le fragment et rattacher son interface utilisateur ultérieurement. Si vous remplacez le fragment, vous le retirez réellement du conteneur et il passera par tous les événements de démontage du cycle de vie (onPause, onStop, etc.) et si, pour une raison quelconque, vous avez besoin de nouveau de ce fragment, vous devrez réinsérez-le dans le conteneur et laissez-le exécuter à nouveau toute son initialisation. 

S'il existe une forte probabilité que vous ayez à nouveau besoin de ce fragment, alors masquez-le, car il est moins coûteux de redessiner sa mise en page que de le réinitialiser complètement.

123

Vous avez essentiellement répondu vous-même. Si vous souhaitez remplacer (l'ancien fragment n'est plus nécessaire), utilisez replace() si vous souhaitez le masquer temporairement, puis effectuez hide().

4
Marcin Orlowski

J'ai utilisé la méthode masquer/afficher dans mon activité avec 4 fragments, ce qui a résolu ma solution, mais un moment au hasard, lorsque je montre ma boîte de dialogue, il donne une mauvaise exception de jeton à la fenêtre. masquer la méthode n'est pas parfaite 

0
Dishant Kawatra