web-dev-qa-db-fra.com

Comment ouvrir un nouveau fragment à partir d'un autre fragment?

J'ai essayé de faire une navigation entre les fragments. J'ai le NewFragment.Java avec le nouveau fragment qui fonctionne. Mon problème est:

Comment puis-je faire cela onClickListener exécuter 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 ça compte).

58
HultBullt

Ajouter 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();

La chaîne "findThisFragment" peut être utilisé pour retrouver le fragment ultérieurement, si besoin est.

110
Narendra

C'est le code le plus décrit du code de @ Narendra,

Vous avez d’abord besoin d’une instance du 2e 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 ().

5
Nipuna Dilhara

Vous devez créer une fonction dans l’activité pour ouvrir un nouveau fragment et transmettre la référence d’activité au fragment. Pour certains événements dans le fragment, appelez cette fonction.

3
vipul mittal
@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();  
}
2
Vinod Joshi

Utilisez ceci,

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
1
 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 présentation de classe actuelle. Lors de l'appel, le nouveau fragment est automatiquement infiltré.

0
Mbanda

Ajout à la solution @Narendra ...

IMPORTANT: lorsque vous utilisez des fragments, la navigation étant étroitement liée à l'activité de l'hôte, vous ne pouvez pas simplement passer d'un fragment à un autre sans implémenter cette classe de fragment dans Host Activity.

Échantillon:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

Vérifiez également que l’activité de votre hôte possède la fonction de remplacement suivante:

@Override public void onFragmentInteraction(Uri uri) {} J'espère que cela vous aidera ...

0
Gerry R