在FragmentManager中管理Backstackentries
-
24-10-2019 - |
题
如何清除 BackStackEntries
在 FragmentManager
?这是我用来更改片段对象的代码:
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());
}
如果您想清除所有背堆,可能是因为您将做与以前上下文无关的事情。在这种情况下,您应该启动一项新活动。
当我开始理解时,随着片段的范围,活动将作为碎片容器起作用。您应该尝试在碎片之间保持独立性,同时根据其上下文组织活动。
在您的情况下,当发生特定情况时,您可以启动新活动,并将所需的片段放在这项新活动上,而不是将其放置在旧活动中。这项新活动将处理新的碎片堆栈。这样,您也将使您的代码更加封装,不是吗?
看看这个解释性答复: Commonsware回复
希望能帮助到你!
您是否在Fragment Manager中尝试了PopBackStack()调用?
不隶属于 StackOverflow