14

我有一个活动,我正在使用以下方法切换片段:

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 被“打开”时,我希望从 backstack 中删除前一个(N-1),所以当我按下“返回”时,我希望恢复 N-2 个片段。

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

在切换到 N 片段之前,我曾尝试在 N-1 片段中调用 popBackStack(..)。但在这种情况下,N-2 个片段被恢复,并且只有在显示 N 个片段之后。

我的问题是:有没有办法从后台删除前一个片段而不弹出当前片段?

4

2 回答 2

1

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

于 2014-01-30T09:33:29.700 回答
0

您可以使用上述不使用 addToBackStack()方法并直接调用commit()的替代方法;

于 2015-01-22T09:38:08.830 回答