web-dev-qa-db-fra.com

Quand utiliser les méthodes d'attachement et de détachement de FragmentTransaction

Je viens de parcourir la documentation des méthodes attach() et detach() de FragmentTransaction:

attach(): Re-attachez un fragment après l'avoir préalablement détaché de l'interface utilisateur avec detach(Fragment). Cela provoque la recréation de sa hiérarchie de vues, son rattachement à l'interface utilisateur et son affichage.

Eh bien, qu'est-ce que cela signifie?

  1. Plus précisément, j'ai vu un exemple:

    mMapFragment = new MapFragment();
    ft.beginTransaction(mMapFragment)
      .attach()
      .add(R.id.container, mMapFragment)
      .commit();
    

    J'ai supprimé la attach() et réessayé: je n'ai remarqué aucune différence. Que fait le attach dans cet exemple? Quelle est la différence par rapport à cela:

    ft.beginTransaction()
      .add(R.id.container, mMapFragment)
      .commit();
    
  2. Dans le cas où l'exemple ci-dessus n'est pas assez bon pour montrer la différence ... Je veux juste savoir quand devons-nous appeler explicitement la attach() et detach()? Il serait préférable d'expliquer la différence en ce qui concerne l'ajout/la suppression/le remplacement.

31
GingerJim

Je pense qu'il vaut mieux jeter un oeil à la définition de Détacher et Supprimer dans FragmentTransaction Documentation pour comprendre ce qui se passe.

Détacher

Détachez le fragment donné de l'interface utilisateur. Il s'agit du même état que lorsqu'il est placé sur la pile arrière: le fragment est supprimé de l'interface utilisateur, mais son état est toujours activement géré par le gestionnaire de fragments. En entrant dans cet état, sa hiérarchie de vues est détruite.

Retirer

Supprimez un fragment existant. S'il a été ajouté à un conteneur, sa vue est également supprimée de ce conteneur.

Ça veut dire:

En en détachant vous ne détruisez que la vue du fragment mais gardez son état dans le gestionnaire de fragments. Cependant, en supprimant vous supprimerez le fragment et son état du gestionnaire de fragments; en outre, il supprimera la vue des fragments si elle a été ajoutée à un conteneur d'interface utilisateur. Ainsi, les deux détruisent la vue du fragment, mais détacher conserve l'état du fragment dans le gestionnaire de fragments.


Il est maintenant temps de regarder attacher et ajouter.

Ajouter

Ajoutez un fragment à l'état d'activité. Ce fragment peut éventuellement avoir également sa vue (si Fragment.onCreateView retourne non null) dans une vue conteneur de l'activité.

Attacher

Rattachez un fragment après l'avoir préalablement détaché de l'interface utilisateur avec détachement (Fragment). Cela provoque la recréation de sa hiérarchie de vues, son rattachement à l'interface utilisateur et son affichage.

Ça veut dire:

Après avoir ajouté le fragment, il sera ajouté à l'état d'activité et sa vue sera ajoutée à la vue Conteneur définie. Mais en attachant rien ne sera affiché si le fragment n'a pas déjà été ajouté à l'interface utilisateur. Il s'attache simplement au gestionnaire de fragments. Cependant, si la vue a déjà été ajoutée à un conteneur dans l'interface utilisateur et détachée après cela, en l'attachant, elle s'affichera à nouveau dans son conteneur. Enfin, vous pouvez utiliser l'attachement et le détachement si vous voulez détruire temporairement la vue fragmentée et que vous souhaitez afficher et construire sa vue sur l'avenir sans perdre son état dans l'activité.

83
VSB