Fragments Android: Quand utiliser cacher / afficher ou append / supprimer / remplacer?

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

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

… ou ce qui suit, avec show and hide?

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

Est-ce qu’une façon de le faire est plus efficace? Vous ne trouvez pas beaucoup d’informations sur l’utilisation de ces méthodes ou sur leur impact sur le cycle de vie des fragments impliqués. Merci!

Vous devez envisager ce que vous comptez faire avec le fragment pour décider du chemin à suivre. Si vous utilisez une FragmentTransaction pour masquer le fragment, il peut toujours être en cours d’exécution, mais son interface utilisateur a été détachée de la fenêtre pour ne plus être visible. Donc, techniquement, vous pouvez toujours interagir avec le fragment et rattacher son interface utilisateur plus tard, ce dont vous avez besoin. Si vous remplacez le fragment, vous le retirez du conteneur et il passera par tous les événements de déassembly du cycle de vie (onPause, onStop, etc.) et si, pour une raison quelconque, vous avez encore besoin de ce fragment, vous devrez réinsérez-le dans le conteneur et laissez-le parcourir à nouveau toute son initialisation.

S’il y a une forte probabilité que vous ayez de nouveau besoin de ce fragment, alors cachez-le simplement car il est moins coûteux de redessiner sa mise en page que de le réinitialiser complètement.

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