У меня возникли проблемы с решением проблемы с BackStack. У меня есть 3 фрагмента, которыми управляет Activity:
Для навигации между фрагментами я использую этот код:
private void showFragment(BabysitFragment babysitFragment, UserRequest userRequest) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
switch (babysitFragment) {
case CHILDREN_OVERVIEW:
toolbar.setVisibility(View.VISIBLE);
Fragment childrenSpecification = ChildrenOverviewFragment.newInstance(userRequest);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, childrenSpecification, BabysitFragment.CHILDREN_OVERVIEW.getSimpleName()).commit();
break;
case CHILD_SPECIFICATION:
toolbar.setVisibility(View.VISIBLE);
Fragment childSpecification = ChildSpecificationFragment.newInstance(userRequest);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, childSpecification, BabysitFragment.CHILD_SPECIFICATION.getSimpleName()).commit();
break;
}
}
//Gets called by FinalizeFrag and ChildSpecificationFrag
@Override
public void onChildrenOverviewNeeded(UserRequest userRequest) {
showFragment(BabysitFragment.CHILDREN_OVERVIEW, userRequest);
}
//Gets called by ChildrenOverviewFrag
@Override
public void onChildSpecificationNeeded(UserRequest userRequest) {
showFragment(BabysitFragment.CHILD_SPECIFICATION, userRequest);
}
Я хочу, чтобы пользователь мог вернуться к FinalizeFrag, используя кнопку возврата из двух других фрагментов. Это работает с текущим кодом, но в 1 потоке у меня есть проблема:
- Пользователи сохраняют новый «дочерний элемент» в ChildSpecificationFrag (значок сохранения на панели инструментов).
- Пользователь перенаправляется на ChildrenOverviewFrag
- Пользователь нажимает кнопку «Назад»
- Остается на ChildrenOverviewFrag (СЛЕДУЕТ перенаправлять на FinalizeFrag)
ПРИМЕЧАНИЕ. Когда я снова нажимаю кнопку, она перенаправляется на FinalizeFrag.
Код при нажатии кнопки закрытия (ChildSpecificationFragment):
if (id == android.R.id.home) {
getActivity().onBackPressed();
}
Код при нажатии кнопки сохранения (ChildSpecificationFragment):
...
userRequest.getFamilyDetails().getChildren().add(child);
getActivity().getSupportFragmentManager().popBackStackImmediate();
onChildrenOverviewNeededListener.onChildrenOverviewNeeded(userRequest, this);
Как видите, я удаляю фрагмент из BackStack. Что я делаю неправильно? Заранее спасибо!