У меня есть активность с 4 фрагментами. Я хотел бы избежать ситуаций, когда пользователь нажимает 100 раз перед выходом. Когда фрагмент установлен, он добавляется в задний стек. Например: Пользователь устанавливает фрагменты в таком порядке: 1, 2, 3, 4, затем он устанавливает frag 2, а затем 4. Мой backStack выглядит так (виден фрагмент 4): 2, 4, 3, 2, 1 и выход. Я бы хотел, чтобы мой backStack выглядел так: 2, 3, 1 и выход.
Я пытался решить свою проблему с помощью popBackStackImmediate(string, int flags), как в этом посте: Предотвратить многократное стекирование одного и того же фрагмента ( addToBackStack ) Но мой backStack выглядит как (с видимыми 4) 2, 1 и выход. Я пришел к выводу, что popBackStackImmediate() удаляет стеки поверх извлеченного стека (надеюсь, вы понимаете, о чем я).
private void setFragment(Fragment fragment) {
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.main_frame, fragment);
ft.addToBackStack(backStateName);
mMainNav.setItemBackgroundResource(R.color.PopWindowBorder_HomeRenovationfragment);
ft.commit();
}
}
Я ожидаю, что каждый фрагмент будет находиться в заднем стеке не более одного раза, не нарушая порядок заднего стека, чтобы иметь задний стек, который выглядит так: 2, 3, 1 и выход. :)