Supposons que je souhaite remplacer le fragment actuel dans une vue de conteneur par une autre. Vaut-il mieux utiliser remplacer ...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, null);
ft.commit();
... ou ce qui suit, avec afficher et masquer?
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.hide(oldFragment);
ft.show(newFragment);
ft.commit();
Une façon de procéder est-elle plus efficace? Impossible de trouver beaucoup d'informations sur l'utilisation de ces méthodes ou sur la manière dont elles affectent le cycle de vie des fragments impliqués. Merci!
android
android-fragments
Robert Karl
la source
la source
Réponses:
Vous devez réfléchir à ce que vous prévoyez de faire avec le fragment pour décider du chemin à suivre. Si vous utilisez une FragmentTransaction pour masquer le fragment, il peut toujours être dans l'état d'exécution de son cycle de vie, mais son interface utilisateur a été détachée de la fenêtre afin qu'elle ne soit plus visible. Vous pouvez donc techniquement toujours interagir avec le fragment et rattacher son interface utilisateur plus tard. Si vous remplacez le fragment, vous le retirez en fait du conteneur et il passera par tous les événements de démontage dans le cycle de vie (onPause, onStop, etc.) et si pour une raison quelconque vous avez à nouveau besoin de ce fragment, vous devrez insérez-le de nouveau dans le conteneur et laissez-le exécuter à nouveau toute son initialisation.
S'il y a une forte probabilité que vous ayez à nouveau besoin de ce fragment, masquez-le simplement car c'est une opération moins coûteuse pour redessiner sa disposition que pour la réinitialiser complètement.
la source
hide()
etshow()
économiser sur cela! Merci pour cela!Vous vous êtes essentiellement répondu. Si vous souhaitez remplacer (si l'ancien fragment n'est plus nécessaire), utilisez
replace()
si vous souhaitez le masquer temporairement, faites-lehide()
.la source
J'ai utilisé la méthode hide / Show dans mon activité avec 4 fragments, cela a résolu ma solution, mais quelque temps au hasard, lorsque je montre ma boîte de dialogue, cela donne une exception de jeton de fenêtre lorsque j'ai utilisé la méthode d'ajout et de remplacement, alors une mauvaise exception de jeton ne se produit pas, donc je pense que show / la méthode de masquage n'est pas parfaite
la source