删除容器中的所有碎片

有没有办法删除所有已经添加了特定视图的视图ID?

例如,我想删除所有添加R.id.fragmentcontainer视图的片段

谢谢,

Related of "删除容器中的所有碎片"

你可以尝试下面的代码

getSupportFragmentManager().beginTransaction().remove(frag).commit(); 

* frag是要删除的片段的对象。

  OR getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.your_container)).commit(); 

它将删除“your_container”容器中的片段。

HapPy编码。

它非常简单,只是通过所有的碎片循环,并删除它

 for(Fragment fragment:getSupportFragmentManager().getFragments()){ getSupportFragmentManager().beginTransaction().remove(fragment).commit(); } 

但是在导航抽屉的情况下一定要检查它,如果你尝试删除它,你会得到错误。

  for(Fragment fragment:getSupportFragmentManager().getFragments()){ if(fragment instanceof NavigationDrawerFragment) continue; else { getSupportFragmentManager().beginTransaction().remove(fragment).commit(); } } 

最后但非常重要的一定要在做任何片段事务之前检查null

  for(Fragment fragment:getSupportFragmentManager().getFragments()){ if(fragment instanceof NavigationDrawerFragment) continue; else { if(fragment!=null) getSupportFragmentManager().beginTransaction().remove(fragment).commit(); } } 

将所有片段保存在一个ArrayList中。

初始化:

 List<Fragment> activeCenterFragments = new ArrayList<Fragment>(); 

将片段添加到列表中:

 private void addCenterFragments(Fragment fragment) { fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.empty_center_layout, fragment); activeCenterFragments.add(fragment); fragmentTransaction.commit(); } 

当你想删除所有这些,请执行以下操作:

 private void removeActiveCenterFragments() { if (activeCenterFragments.size() > 0) { fragmentTransaction = fragmentManager.beginTransaction(); for (Fragment activeFragment : activeCenterFragments) { fragmentTransaction.remove(activeFragment); } activeCenterFragments.clear(); fragmentTransaction.commit(); } } 

我在生产中使用这种方法已经有好几年了,它的作用就像一种魅力。 如果您有任何问题,请告诉我。

这确实很简单。

 private static void removeAllFragments(FragmentManager fragmentManager) { while (fragmentManager.getBackStackEntryCount() > 0) { fragmentManager.popBackStackImmediate(); } } 

试试这个,希望它有帮助:D

 try { if(manager.getFragments()!=null){ if(manager.getBackStackEntryCount()>0) { for (int i = 0; i < manager.getBackStackEntryCount(); i++) manager.popBackStack(); manager.beginTransaction().remove(getSupportFragmentManager() .findFragmentById(R.id.main_content)) .commit(); } } }catch (Exception e){ e.printStackTrace(); }