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!
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.
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()
.
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