FragmantClass rSum = new FragmantClass();
getSupportFragmentManager().beginTransaction().remove(rSum).commit();
我正在尝试删除此片段,当我加载切换另一个片段时。上述片段不会被删除。这是我打电话切换片段的方法。
public void switchContent(Fragment fragment) {
FragmantClass rSum = new FragmantClass();
getSupportFragmentManager().beginTransaction().remove(rSum).commit();
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
getSlidingMenu().showContent();
}
答案 0 :(得分:44)
getSupportFragmentManager().beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit();
试试这个,它应该有效。
public void switchContent(Fragment fragment) {
getSupportFragmentManager().beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit();
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
getSlidingMenu().showContent();
}
答案 1 :(得分:13)
在我个人的情况下,我以这种方式添加和删除片段:
if(getSupportFragmentManager().findFragmentById(R.id.container) != null) {
getSupportFragmentManager()
.beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.container)).commit();
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();
总是很好地验证您的容器是否有片段或具有空异常
答案 2 :(得分:8)
这是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();
如果您多次从视图中删除所有片段,可以考虑检查当前片段是否为空或isDetached()
或isRemoving()
,或者您可能会获得NullPointerExceptions
更新6-9-15: getSupportFragmentManger().getFragments()
的文档现在显然是hidden,但在我的代码中仍能正常运行。这是文档的屏幕截图:
更新8-3-15 :如果您没有使用支持库获取片段,很遗憾没有getFragments()
可用,但仍有一对,更多不方便,选择。
fragment
提供tag
或id
,并根据需要对其进行迭代以处理每个fragment
。onAttachListener
创建一个监听器,因此每次将新fragment
附加到activity
时,您都可以存储fragment
,然后遍历该数据结构根据需要处理每个fragment
。如果不使用getSupportFragmentManager()
,要处理交易,您需要使用getFragmentManager()
。