Как удалить предыдущую запись в стеке из FragmentManager?

У меня есть действие, в котором я переключаю фрагменты, используя следующий метод:

public void setCurrentFragment(Fragment fragment) {
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
     transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out);
     transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++));
     transaction.addToBackStack(Integer.toString(fragmentId));
     transaction.commit();
}

Мой стек навигации выглядит так:

N-2 -> N-1 -> N

Когда определенный фрагмент N «открыт», я хочу, чтобы предыдущий (N-1) был удален из backstack, поэтому, когда я нажимаю «назад», я хочу, чтобы фрагмент N-2 был восстановлен.

Когда я вызываю FragmentManager.popBackStack (..) в фрагменте N, он удаляет фрагмент N и N-1.

Я попытался вызвать popBackStack (..) во фрагменте N-1 прямо перед переключением на фрагмент N. Но в этом случае возобновляется N-2 фрагмент, и только после этого отображается N фрагмент.

Мой вопрос: есть ли способ удалить предыдущий фрагмент из backstack, не выталкивая текущий фрагмент?


person nemezis    schedule 30.01.2014    source источник
comment
Есть ли у вас какое-либо решение для той же проблемы, потому что я тоже сталкиваюсь с той же проблемой?   -  person Pravinsingh Waghela    schedule 30.11.2016


Ответы (2)


используйте public abstract void popBackStack (int id, int flags) для возврата в стек. Проверьте это например getSupportFragmentManager().popBackStack(fragmentId,0);

person Jaiprakash Soni    schedule 30.01.2014
comment
Я уже пробовал, он удаляет и мой текущий фрагмент из бэкстека. Документация гласит: «Отменить все состояния стека назад до состояния с заданным идентификатором. ' - person nemezis; 30.01.2014

вы можете использовать альтернативный метод с указанным выше, который не будет использовать метод addToBackStack () и напрямую вызывать commit ();

person SushilModani    schedule 22.01.2015