Как вернуться от фрагмента А к фрагменту Б?

Мне нужно перейти от FragmentA к FragmentB (я использую навигационный броузер)

Я создаю этот метод во FragmentB:

public void onBackPressed(){
    FragmentManager fm = getActivity().getFragmentManager();
    fm.popBackStackImmediate();
}

но они не работают, как я могу реализовать этот метод?

3 ответа

Решение

Когда вы добавляете свой фрагмент, вы также должны добавить его в backstack вашего фрагмента.

FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
                  ft.replace(R.id.content, fragment, backStateName);
                  ft.addToBackStack(backStateName);
                  ft.commit();

(здесь R.id.content - ваш контейнер фрагментов в вашей деятельности)

Затем вы должны переопределить метод onBackPressed в вашей деятельности, который содержит ваши фрагменты.

@Override
public void onBackPressed() {
 if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                 getSupportFragmentManager().popBackStack();
  }
}

если вы хотите настроить свой onBackPressed, то вы можете проверить ваш видимый фрагмент в вашей деятельности и создать обратный вызов для выполнения действия для этого конкретного фрагмента. пример -

    @Override
    public void onBackPressed() {
     if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
              Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
              if (fragment instanceof FragmentB) {
                            ((FragmentB) fragment).onBackPressed();
//                     getSupportFragmentManager().popBackStack();
      }
    }

теперь вы можете добавить getSupportFragmentManager().popBackStack(); в методе onBackPressed() вашего фрагмента.

Для перехода от одного фрагмента к другому я вызываю метод Activity из Fragment, чтобы метод Activity имел доступ к тому представлению, которое содержит фрагмент, и он мог легко переключаться.

как это в моем фрагменте

((MainActivity) getActivity()).TransitionFromItemToCategory();

И во фрагменте вот так

public void TransitionFromItemToCategory(){
    FoodCategoryFragment FCM = new FoodCategoryFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, FCM);
    ft.commit();
}

Этот код должен быть внутри Activity держа оба фрагмента.

Убедитесь, что вы добавили (а не заменили) фрагмент в задний стек, вызвав:

android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit

или их эквивалент из библиотеки поддержки

Другие вопросы по тегам