Мне нужно отобразить несколько наборов инструкций для пользователя. Для каждой инструкции (FragmentA) пользователь может перейти к другому экрану (FragmentA1). Я использовал ViewPager, который содержит список фрагментов. Когда пользователь переходит к первому фрагменту (FragmentA), пользователь может нажать кнопку и перейти к подробному представлению инструкции (FragmentA1). Таким образом, каждая страница вьюпейджера способна открыть другой фрагмент.
Все работает нормально до сих пор. Проблема, с которой я сталкиваюсь, связана с backstack. Активность с адаптером viewpager обрабатывает методы moveToNext() и moveToPrevious(). Ниже приведена моя реализация метода onBackPressed():
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager fm = frag.getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return;
} else {
moveToPrevious();
return;
}
}
}
super.onBackPressed();
}
С приведенной выше реализацией: если я прохожу FragA-> FragA1-> FragB-> FragB1-> FragC-> FragC1, когда я нахожусь в FragC1 и нажимаю кнопку «Назад», я сразу перехожу к FragB1 вместо FragC, а затем к FragA1 . Мне нужно пройти тот же путь назад, что и пройденный вперед.
Я не уверен, что не так, но он не может вытолкнуть вложенный фрагмент и отобразить его родительский фрагмент. Разве fm.popBackStack() не должен показывать родительский фрагмент?