346 votes

Différence entre add(), replace() et addToBackStack()

Quelle est la principale différence entre l'appel de ces méthodes :

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);

Que signifie remplacer un fragment déjà existant, et ajouter un fragment à l'état d'activité, et ajouter une activité à la pile arrière ?

Deuxièmement, avec findFragmentByTag() cette recherche porte sur les balises ajoutées par le add() / replace() ou la méthode addToBackStack() méthode ?

34voto

Avanindra_dubey Points 310

Différence fondamentale entre add() y replace() peut être décrit comme suit :

  • add() est utilisé pour ajouter simplement un fragment à un élément racine.
  • replace() se comporte de manière similaire, mais dans un premier temps, il supprime les fragments précédents et ajoute ensuite le fragment suivant.

Nous pouvons voir la différence exacte lorsque nous utilisons addToBackStack() en même temps que add() o replace() .

Lorsque nous appuyons sur le bouton retour après en cas de add() ... onCreateView n'est jamais appelé, mais en cas de replace() Quand nous appuyons sur le bouton retour ... oncreateView est appelé à chaque fois.

2voto

Keshav Gera Points 1892

Lorsque nous ajoutons le premier fragment --> le deuxième fragment en utilisant la méthode add()

 btn_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Click First 
Fragment",Toast.LENGTH_LONG).show();

                Fragment fragment = new SecondFragment();
                getActivity().getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();
//                        .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

            }
        });

Lorsque nous utilisons add() dans le fragment

E/Keshav SecondFragment: onAttach
E/Keshav SecondFragment: onCreate
E/Keshav SecondFragment: onCreateView
E/Keshav SecondFragment: onActivityCreated
E/Keshav SecondFragment: onStart
E/Keshav SecondFragment: onResume

Lorsque nous utilisons replace() dans le fragment

passer du premier fragment au deuxième fragment dans First -->Second en utilisant la méthode replace()

 btn_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Click First Fragment",Toast.LENGTH_LONG).show();

                Fragment fragment = new SecondFragment();
                getActivity().getSupportFragmentManager().beginTransaction()
//                        .add(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();
                        .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

            }
        });

E/Keshav SecondFragment: onAttach
E/Keshav SecondFragment: onCreate

E/Keshav FirstFragment: onPause -------------------------- FirstFragment
E/Keshav FirstFragment: onStop --------------------------- FirstFragment
E/Keshav FirstFragment: onDestroyView -------------------- FirstFragment

E/Keshav SecondFragment: onCreateView
E/Keshav SecondFragment: onActivityCreated
E/Keshav SecondFragment: onStart
E/Keshav SecondFragment: onResume

Dans le cas du remplacement du premier fragment, ces méthodes sont appelées en supplément (onPause, onStop, onDestroyView sont appelés en supplément).

E/Keshav FirstFragment : onPause

E/Keshav FirstFragment : onStop

E/Keshav FirstFragment : onDestroyView

2voto

Lloyd Dcosta Points 141

Une chose importante à noter :

La différence entre Replace et Replace with backstack est que chaque fois que nous utilisons seulement replace alors le fragment est détruit (ondestroy() est appelé) et quand nous utilisons replace with backstack alors fragments onDestroy() n'est pas appelé (c.-à-d. quand le bouton retour est appuyé fragment est invoqué avec son onCreateView())

0voto

raj kavadia Points 644

Les fonctions add et replace du FragmentManger peuvent être décrites comme suit 1. add signifie qu'il ajoutera le fragment dans la pile arrière des fragments et qu'il apparaîtra à l'image donnée que vous fournissez. comme

getFragmentManager.beginTransaction.add(R.id.contentframe,Fragment1.newInstance(),null)

2.replace signifie que vous remplacez le fragment par un autre fragment à l'image donnée.

getFragmentManager.beginTransaction.replace(R.id.contentframe,Fragment1.newInstance(),null)

La principale utilité entre les deux est que lorsque vous empilez les fragments, le remplacement rafraîchit le fragment, mais l'ajout ne rafraîchit pas le fragment précédent.

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