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

Dan*_*cek 5 android fragment back-stack fragmentmanager

简单的问题,但似乎无法回答...如何清除fragmentManager后栈而不弹出片段?

我这样理解:

后栈条目=使用addToBackStack命令预先保存的事务列表.例如:"将片段1替换为片段2".

popBackStack =最后保存的transatcion反向.例如:"将片段2替换为片段1".

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

好的但是..

我改变了主意,想要清理后面的堆栈.我希望用户使用F2片段但是当他/她按下后退按钮时,Activity应该关闭,就像后面的堆栈是空的一样.

我需要这样的东西:

for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++){
    getFragmentManager().getBackStackEntryAt(i).remove();
}
Run Code Online (Sandbox Code Playgroud)

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

只是为了澄清: android中的后台堆栈不是完全可编辑的列表,如:

  • 交易1
  • 交易2
  • 交易3
  • 交易4

我们不能做"删除交易3"来做:

  • 交易1
  • 交易2
  • 交易4

我们无法清除所有后端堆栈并保持最后一个可见的碎片活着.

我们可以将backstacks记录删除到某个位置,例如:"删除所有事务到事务2"以获得:

  • 交易1
  • 交易2

在屏幕上,您将看到交易2的效果.

为什么我需要这个?

我认为我可以创建一个片段,它将是"主要片段".这个主要片段将使用一个接口来告诉它现在显示的任何活动,现在显示这个boss片段,以及之前发生的任何事情 - 不再重要了.

(F) - 片段,(A) - 活动

(F) - 嘿老兄.我是老板,我可见并且依附于你.请为我清理你的背包,但保留我的交易,这让我来到这里.

(A) - 对不起男人......你应该在交易前告诉我清理我的背包,这样我就可以在新的背包上添加你的交易了.

Abh*_*tel 7

试试这可能会有所帮助

public void clearBackstack() {

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

}
Run Code Online (Sandbox Code Playgroud)