如何在不弹出片段的情况下清除 fragmentManager 返回堆栈?

How to clear fragmentManager back stack without poping fragments?

简单的问题,但似乎无法回答... 如何在不弹出片段的情况下清除 fragmentManager 返回堆栈?

我是这样理解的:

返回堆栈条目 = 以前使用 addToBackStack 命令保存的事务列表。 例如:"replace Fragment 1 with Fragment 2".

popBackStack = 反转最后保存的事务。 例如:"replace Fragment 2 with Fragment 1".

假设我做了第一笔交易:F1->F2 并将此交易添加到后台堆栈。当我现在按下后退按钮时,F2->F1 将会发生。

好的...但是..

我改变主意了,我想清除后台堆栈。 我希望用户使用 F2 片段,但是当 he/she 按下后退按钮时,Activity 应该关闭,就像后退堆栈是空的一样。

我需要这样的东西:

for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++){
    getFragmentManager().getBackStackEntryAt(i).remove();
}

已编辑 我试着向复杂的情况提出简单的问题,我得到了简单的答案;) Abhishek Patel 的回答非常好,但这不是我想要的。这仍然是一个很好的答案。

澄清一下: android 中的返回堆栈不是完全可编辑的列表,例如:

我们不能"Remove transaction 3"做:

我们不能清除所有后台堆栈并使最后一个可见片段保持活动状态。

我们可以删除backstacks记录到某个位置,如: "Remove everything to Transaction 2"得到:

在屏幕上您会看到事务 2 的效果。

为什么我需要这个?

我想我可以制作一个 'Main fragment' 的片段。这个主片段将使用一个界面来告诉 activity 它现在显示的这个 boss 片段是什么,以及什么发生在之前 - 不再重要了。

(F)-片段,(A)-Activity

(F) - 嘿伙计。我是老板,我很显眼,很依恋你。请为我清理你的后台,但保留我的交易。

(A) - 抱歉,伙计...你应该在交易前告诉我清除我的后台堆栈,这样我就可以将你的交易添加到新的后台堆栈之上。

试试这个可能会有帮助

public void clearBackstack() {

    BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(
            0);
    getSupportFragmentManager().popBackStack(entry.getId(),
            FragmentManager.POP_BACK_STACK_INCLUSIVE);
    getSupportFragmentManager().executePendingTransactions();

}