Подтвердить что ты не робот

Как удалить предыдущую запись стека из 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) был удален из задней части, поэтому, когда я нажимаю "назад", я хочу восстановить фрагмент N-2.

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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