У меня есть приложение с навигационным ящиком, которое переводит фрагменты. Изнутри одного из этих фрагментов я призываю новую деятельность. Когда я нажимаю обратно в этой операции (на панели инструментов), я хочу вернуться к предыдущему выделенному фрагменту, но вместо этого он возвращает мне первый фрагмент. Я добавляю свой фрагмент обратно в стек, поэтому это не должно быть проблемой.
Вот что я уже пробовал:
Я переопределил метод onBackPressed во втором упражнении вроде этого:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
} else {
getFragmentManager().popBackStack();
}
}
Он не работает. Я также сохранил индекс текущего фрагмента внутри метода onsaveinstancestate и извлекал его, но тот же результат. Я также старался всегда помещать текущий фрагмент внутри переменной и пытаться выполнить его, но все же, он не работает. Что-нибудь еще, что я мог попробовать?
Интересный факт: если я нажму обратно на нижнюю панель, он действительно вернется к предыдущему фрагменту.
EDIT: Вот мой код для этого:
private void replaceFragment(Fragment fragment)
{
if (fragment != null)
{
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.main_content, fragment)
.addToBackStack(null)
.commit();
}
}
Я добавляю только первый фрагмент, если savedInstanceState имеет значение null, например:
if (savedInstanceState == null) {
// first time
mTitle = getResources().getString(R.string.home);
replaceFragment(HomeFragment.newInstance());
}
И да, все это делается внутри метода onCreate().