122 votes

Android Fragments: Lors de l'utilisation de masquer/afficher ou ajouter/supprimer/remplacer?

Supposons que je souhaite remplacer l'actuel fragment dans certains conteneur de vue avec l'autre. Il vaut mieux remplacer...

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

... ou le suivant, d'afficher et de masquer?

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

Est une façon de faire plus efficace? Ne trouve pas beaucoup d'informations sur l'utilisation de ces méthodes, ou la façon dont ils affectent le cycle de vie de ses fragments impliqué. Merci!

143voto

Vous devriez considérer ce que vous prévoyez faire avec le fragment de décider du chemin à suivre. Si vous utilisez un FragmentTransaction pour masquer le fragment, alors 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 de sorte qu'il n'est plus visible. Vous pourriez donc techniquement toujours interagir avec le fragment et de rattacher son INTERFACE utilisateur plus tard, vous devrez. Si vous remplacez le fragment, la vous sont effectivement en le tirant hors du récipient, et il va par le biais de l'ensemble de la destruction des événements dans le cycle de vie (onPause, onStop, etc), et si pour une raison quelconque vous avez besoin de ce fragment de nouveau, vous devez l'insérer dans le récipient et le laisser courir à travers l'ensemble de son initialisation de nouveau.

Si il y a une forte probabilité que vous aurez besoin de ce fragment de nouveau, puis il suffit de le cacher parce que c'est une opération moins cher pour redessiner la disposition de complètement réinitialiser.

5voto

Marcin Orlowski Points 24633

En gros, vous avez répondu vous-même. Si vous souhaitez remplacer (si vieux fragment n'est plus nécessaire) utiliser replace() si vous voulez temporaire cacher alors n' hide().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X