web-dev-qa-db-fra.com

Comment remplacer un fragment au clic de ce fragment?

J'ai une activité contenant des fragments multiples. Activité ont d'abord fragment et il a deux boutons. En cliquant sur ce bouton, je dois remplacer le fragment par fragment nouveau. Chaque fragment a divers widgets et remplace le fragment actuel par divers événements.

C'est mon problème. Comment puis-je y parvenir?.

Suggérez-moi des idées.

10
Top Cat

vous pouvez remplacer fragment par FragmentTransaction. 

Voici.

Faire une interface.

public interface FragmentChangeListener 
{
    public void replaceFragment(Fragment fragment); 
}

implémente votre activité de maintien de fragment avec cette interface.

public class HomeScreen extends FragmentActivity implements
        FragmentChangeListener {


         @Override
         public void replaceFragment(Fragment fragment) {
            FragmentManager fragmentManager = getSupportFragmentManager();;     
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(mContainerId, fragment, fragment.toString());
            fragmentTransaction.addToBackStack(fragment.toString());
            fragmentTransaction.commit();   
    }

}

Appelez cette méthode à partir de fragments comme ceci.

// Dans ton fragment.

public void showOtherFragment()
{
       Fragment fr=new NewDisplayingFragment();
             FragmentChangeListener fc=(FragmentChangeListener)getActivity();
             fc.replaceFragment(fr);
}

J'espère que cela fonctionnera!

REMARQUE: mContainerId est l'identifiant de la vue qui contient les fragments à l'intérieur. Vous devez également remplacer la méthode onString () de Fragment.

16
Ahmad Raza

Eh bien, même je suis en train d'apprendre Android ..

j'ai résolu le même problème récemment "Comment modifier l'événement de clic du bouton Fragment On"

`buttonNAme.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frame1,new Homefragment());
            fragmentTransaction.commit();
        }
    });`

Ici, "frame1" est l'identifiant de "FRAMELAYOUT" défini dans le XML de DrawerLayer.

donc maintenant Chaque fois que je veux fragmenter une transaction, j’utilise ce code.Chaque fois, il remplacera frame1 par votre dernier fragment.

FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frame1,new newfragment()); fragmentTransaction.commit()

J'espère que cela vous aidera ..

4
Deep Bhatt

Vous pouvez utiliser ce qui suit pour remplacer un fragment au clic de ce fragment:

getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();
2
Dario
  1. Définissez une interface et appelez-la IChangeListener (ou quelque chose comme ça) et définissez une méthode à l'intérieur de laquelle le travail sera effectué (ex, changeFragment()) (ou appelez une autre méthode qui effectuera le travail) pour changer le fragment).
  2. Faites en sorte que votre activité implémente l'interface ou faites en sorte qu'une classe anonyme de l'activité l'implémente.
  3. Créez un constructeur paramétré de votre fragment, qui accepte un paramètre IChangeListener.
  4. Lors de l'initialisation du fragment, transmettez votre implémentation IChangeListener (la classe anonyme ou l'activité, en l'implémentant)
  5. Faites en sorte que l'écouteur onClick du bouton appelle la méthode de changement de IChangeListener.
1
Mario Stoilov

À partir de 2017, il existe différentes bibliothèques qui déclenchent Events using Bus et vous pouvez maintenant l'utiliser pour indiquer à l'activité lorsqu'un événement est déclenché dans un fragment qu'il possède.

Faire référence à:

RxBus avec RxJava

Vous pouvez vérifier les nouvelles architectures suggérées par Google

ViewModel

Ne pas utiliser l'approche dans la réponse acceptée, devenir vraiment moche avec plus de 3 événements différents à partir de fragments

1
Erick Moya

vous pouvez essayer ce code ça marche très bien avec moi, gonfler la mise en page pour voir, définir le bouton et au clic, 

Button btn_unstable;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home,container,false);

    btn_unstable = (Button)view.findViewById(R.id.btn_unstable);
    btn_unstable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_replace, new UnstableFragment()).commit();

        }
    });
    return view;
}
0
Ramy Elbouhy