Comment ouvrir un nouveau fragment à partir d'un autre fragment
J'ai essayé de faire une navigation entre les fragments. J'ai la NewFragment.java avec le nouveau fragment de travail. Mon problème est:
Comment faire pour que cet onClickListener exécute NewFragment.java correctement?
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), NewFragment.class);
startActivity(i);
}});
FYI: c'est de l'intérieur d'un fragment (Je ne sais pas si cela compte).
6 réponses
Ajoutez le code suivant dans votre fonction d'écoute de clic,
NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.Layout_container, nextFrag,"findThisFragment")
.addToBackStack(null)
.commit();
C'est un code Plus décrit du code de @ Narendra,
Vous avez D'abord besoin d'une instance du 2ème fragment. Ensuite, vous devriez avoir des objets de FragmentManager et FragmentTransaction. Le code complet est comme ci-dessous,
Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
J'espère que cela fonctionnera. Parfois, vous pouvez obtenir getSupportFragmentManager () au lieu de getFragmentManager ().
Vous devez créer une fonction à l'intérieur de l'activité pour ouvrir un nouveau fragment et passer la référence d'activité au fragment et sur un événement à l'intérieur du fragment appeler cette fonction.
@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
UserResult nextFrag= new UserResult();
this.getFragmentManager().beginTransaction()
.replace(R.id.content_frame, nextFrag, null)
.addToBackStack(null)
.commit();
}
Utilisez ceci,
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
Fragment fr = new Fragment_class();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.add(R.id.viewpagerId, fr);
fragmentTransaction.commit();
Juste pour être précis, R.id.viewpagerId
est créé dans votre disposition de classe actuelle, lors de l'appel, le nouveau fragment est automatiquement infiltré.