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

时间:2016-03-31 12:06:09

标签: android fragment back-stack fragmentmanager

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

我理解如下:

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

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

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

OK ...但是...

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

我需要类似的东西:

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

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

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

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

我们不能做&#34;删除交易3&#34;制作:

  • 交易1
  • transaction 2
  • transaction 4

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

我们可以将backstacks记录删除到某个位置,如: &#34;删除交易2和#34;得到:

  • 交易1
  • transaction 2

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

为什么我需要这个?

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

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

(F) - 嘿老兄。我是老板,我可见并依附于你。请为我清理你的背包,但保留我带来的交易。

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

1 个答案:

答案 0 :(得分:7)

试试这可能会有所帮助

public void clearBackstack() {

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

}