Как открыть новый фрагмент из другого фрагмента

Я попытался сделать переходы между фрагментами. У меня есть NewFragment.java с новым фрагментом работает. Моя проблема:

Как сделать этот onClickListener запустить NewFragment.Ява правильно?

button.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

       }});

FYI: это изнутри фрагмента (я не знаю, имеет ли это значение).

6 ответов


добавить следующий код в функцию прослушивателя,

     NextFragment nextFrag= new NextFragment();
     getActivity().getSupportFragmentManager().beginTransaction()
     .replace(R.id.Layout_container, nextFrag,"findThisFragment")
     .addToBackStack(null)
     .commit();

Это более описанный код кода @Narendra,

сначала вам нужен экземпляр 2-го фрагмента. Тогда у вас должны быть объекты FragmentManager и FragmentTransaction. Полный код, как показано ниже,

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

надеюсь, это сработает. Иногда вы можете получить getSupportFragmentManager () вместо getFragmentManager ().


вы должны создать функцию внутри действия, чтобы открыть новый фрагмент и передать ссылку на действие фрагменту и на какое-то событие внутри фрагмента вызвать эту функцию.


@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();  
}

использовать это,

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

просто, чтобы быть точным, R.id.viewpagerId cretaed в текущем макете класса, при вызове, новый фрагмент автоматически проникает.