如何在不弹出片段的情况下清除 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 中的返回堆栈不是完全可编辑的列表,例如:
- 交易 1
- 交易 2
- 交易 3
- 交易 4
我们不能"Remove transaction 3"做:
- 交易 1
- 交易 2
- 交易 4
我们不能清除所有后台堆栈并使最后一个可见片段保持活动状态。
我们可以删除backstacks记录到某个位置,如:
"Remove everything to Transaction 2"得到:
- 交易 1
- 交易 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();
}
简单的问题,但似乎无法回答... 如何在不弹出片段的情况下清除 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 中的返回堆栈不是完全可编辑的列表,例如:
- 交易 1
- 交易 2
- 交易 3
- 交易 4
我们不能"Remove transaction 3"做:
- 交易 1
- 交易 2
- 交易 4
我们不能清除所有后台堆栈并使最后一个可见片段保持活动状态。
我们可以删除backstacks记录到某个位置,如: "Remove everything to Transaction 2"得到:
- 交易 1
- 交易 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();
}