Android 4.2: back stack behaviour with nested fragments

后端 未结 17 1790
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-29 16:01

With Android 4.2, the support library got support for nested fragments see here. I\'ve played around with it and found an interesting behaviour / bug regarding back stack an

17条回答
  •  情深已故
    2020-11-29 16:45

    This code will navigate the tree of fragment managers and return the last one that was added that has any fragments it can pop off the stack:

    private FragmentManager getLastFragmentManagerWithBack(FragmentManager fm)
    {
      FragmentManager fmLast = fm;
    
      List fragments = fm.getFragments();
    
      for (Fragment f : fragments)
      {
        if ((f.getChildFragmentManager() != null) && (f.getChildFragmentManager().getBackStackEntryCount() > 0))
        {
          fmLast = f.getFragmentManager();
          FragmentManager fmChild = getLastFragmentManagerWithBack(f.getChildFragmentManager());
    
          if (fmChild != fmLast)
            fmLast = fmChild;
        }
      }
    
      return fmLast;
    }
    

    Call the method:

    @Override
    public void onBackPressed()
    {
      FragmentManager fm = getLastFragmentManagerWithBack(getSupportFragmentManager());
    
      if (fm.getBackStackEntryCount() > 0)
      {
        fm.popBackStack();
        return;
      }
    
      super.onBackPressed();
    }
    

提交回复
热议问题