android - 如何在不弹出 fragment 的情况下清除 fragmentManager 返回堆栈?

标签 android fragment back-stack fragmentmanager

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

我是这样理解的:

返回堆栈条目 = 以前使用 addToBackStack 命令保存的事务列表。 例如:“用 fragment 2 替换 fragment 1”。

popBackStack = 反转最后保存的事务。 例如:“用 fragment 1 替换 fragment 2”。

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

好吧...但是...

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

我需要这样的东西:

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

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

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

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

我们不能“删除事务 3”来:

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

我们无法清除所有后退堆栈并保持最后一个可见 fragment 处于 Activity 状态。

我们可以将backstacks记录删除到特定位置,例如: “Remove everything to Transaction 2”得到:

  • 交易 1
  • 交易 2

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

我为什么需要这个?

我想我可以制作一个 fragment ,它将成为“主要 fragment ”。这个主要 fragment 将使用一个界面来告诉现在显示这个老板 fragment 的任何 Activity ,以及之前发生的任何事情 - 不再重要.

(F)- fragment ,(A)- Activity

(F) - 嘿伙计。我是老板,我很显眼,很依恋你。请为我清除你的后台堆栈,但保留将我带到这里的交易。

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

最佳答案

试试这个可能会有帮助

public void clearBackstack() {

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

}

关于android - 如何在不弹出 fragment 的情况下清除 fragmentManager 返回堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332993/

相关文章:

java - 将 Fragment 置于堆栈顶部

Android low memory killer & application back stack

android - 从通知问题开始申请

java - Android: ContactsContract查询,需要更高级的选择字符串

android - 从 fragment 调用 fragment

java - Android - 由于在 fragment 上发送数据而导致 Activity 无限重新打开

android - AsyncTask 在使用 SherlockFragments 更改选项卡时再次启动

php - 在 Android 应用程序中使用 POST 将 JSON 发送到服务器

android - Android 中的图像内存管理

Android自签名握手报错