这是一个非常简单的解决方案SupportFragmentManager
。FragmentManager
不是很方便,但仍然有效:
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList )
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
或者,如果您被迫使用它(但不推荐):
.commitAllowingStateLoss();
如果您多次从视图中删除所有片段,您可能会考虑检查当前片段是否为 null 或isDetached()
or ,isRemoving()
或者您可能会得到一个NullPointerExceptions
.
更新 6-9-15:的文档现在getSupportFragmentManger().getFragments()
显然是隐藏的,但在我的代码中仍然可以正常工作。这是文档的屏幕截图:
更新 8-3-15:如果您不使用片段的支持库,很遗憾没有getFragments()
可用的库,但仍有一些更不方便的选项。
- 在创建时给每个
fragment
atag
或id
,并遍历它们以fragment
根据需要处理每个。
- 创建一个侦听器
onAttachListener
,以便每次将新fragment
的附加到 时activity
,您可以存储它fragment
,然后遍历该数据结构以fragment
根据需要处理每个。
当不使用getSupportFragmentManager()
, 来处理您需要使用的事务时getFragmentManager()
。