如何从FragmentManager中删除以前的堆栈条目?

nem*_*zis 14 android android-fragments back-stack 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();
}
Run Code Online (Sandbox Code Playgroud)

我的导航堆栈看起来像这样:

N-2 - > N-1 - > N.

当某个片段N'打开'时,我想要从后台堆栈中移除前一个(N-1),所以当我按下"后退"时我想要恢复N-2片段.

当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段.

在切换到N片段之前,我试图在N-1片段中调用popBackStack(..).但是在那种情况下,N-2片段被恢复,并且仅在显示N片段之后.

我的问题是:有没有办法从backstack中删除以前的片段而不弹出当前片段?

Jai*_*oni 1

用于public abstract void popBackStack (int id, int flags)返回堆栈。 例如检查这个getSupportFragmentManager().popBackStack(fragmentId,0);

  • 我已经尝试过了,它也会从后台删除我当前的片段。文档说:“将所有返回堆栈状态弹出到具有给定标识符的状态。” ' (5认同)