如何清除 BackStackEntriesFragmentManager ?这是我用来更改片段对象的代码:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

在特定情况下,我需要删除完整的背包条目。在Fragment Manager中,我没有找到任何特定方法。你有什么想法?

有帮助吗?

解决方案

我一直在研究一种我认为您要做的事情的方法,但是我唯一能够从文档中弄清楚的是,这种方法是否只是清空了背包,或者是否对此有任何含义查看容器。基本上,它找到位于堆栈顶部的条目,并删除所有内容,包括该条目。如果其他人认为存在负面影响,请告诉我,因为我很好奇:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

其他提示

这对我来说很好:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}

您是对的,就我可以阅读的文档而言,无法清除堆栈。

这是一个大问题。尝试将问题上传到Android的 问题跟踪器 我希望有人看着它。我还在等待 .

这是一个骇客,但您可以尝试完成您的 Activity 然后重新开始。它可能会清除堆栈。

如果您想清除所有背堆,可能是因为您将做与以前上下文无关的事情。在这种情况下,您应该启动一项新活动。

当我开始理解时,随着片段的范围,活动将作为碎片容器起作用。您应该尝试在碎片之间保持独立性,同时根据其上下文组织活动。

在您的情况下,当发生特定情况时,您可以启动新活动,并将所需的片段放在这项新活动上,而不是将其放置在旧活动中。这项新活动将处理新的碎片堆栈。这样,您也将使您的代码更加封装,不是吗?

看看这个解释性答复: Commonsware回复

希望能帮助到你!

您是否在Fragment Manager中尝试了PopBackStack()调用?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top