删除容器中的所有碎片

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

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

谢谢,

  • 为什么popbackstack调用onCreateView的片段?
  • 在旋转和返回时恢复MapView的状态
  • FragmentTransaction .attach和.detach的Actionbar选项卡
  • Android应用程序在使用Fragments和ViewPager一段时间后崩溃
  • 在fragmentpageradapter中重用片段
  • MapFragment findFragmentById始终为空
  • Android getActivity()总是在片段内返回null
  • 如何在DialogFragment中显示现有的ListFragment
  • 你可以尝试下面的代码

    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(); }