我有一项活动,我使用以下方法切换片段:
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-1),所以当我按'后'时我想要恢复N-2片段。
当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段。
在切换到N片段之前,我试图在N-1片段中调用popBackStack(..)。但在那种情况下,N-2片段被恢复,并且仅在显示N片段之后。
我的问题是:有没有办法从backstack中删除以前的片段而不弹出当前片段?
答案 0 :(得分:1)
使用public abstract void popBackStack (int id, int flags)
返回堆栈。检查this
例如getSupportFragmentManager().popBackStack(fragmentId,0);
答案 1 :(得分:0)
你可以使用上面一个不使用的替代方法 addToBackStack()方法并直接调用 commit();