Подтвердить что ты не робот

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

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

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

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

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

    }
});

К вашему сведению: это внутри фрагмента (я не знаю, имеет ли это значение).

4b9b3361

Ответ 1

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

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

Строка "findThisFragment" может использоваться, чтобы найти фрагмент позже, если вам нужно.

Ответ 2

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

Сначала вам нужен экземпляр второго фрагмента. Затем у вас должны быть объекты 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().

Ответ 3

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

Ответ 4

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

Ответ 5

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

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();

Ответ 6

 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();

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

Ответ 7

Добавление к решению @Narendra...

ВАЖНО: При работе с фрагментами навигация тесно связана с активностью хоста, поэтому вы не можете просто переходить от фрагмента к фрагменту без реализации этого класса фрагмента в хосте Activity.

Образец:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

Также проверьте, что у вашего хоста есть следующая функция переопределения:

@Override public void onFragmentInteraction(Uri uri) {} Надеюсь, это поможет...