Как вернуться от фрагмента А к фрагменту Б?
Мне нужно перейти от 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
или их эквивалент из библиотеки поддержки