使用(Child)FragmentManager正确使用子子片段

 呆保保_369 发布于 2023-02-09 12:03

如何正确使用碎片中的碎片?

我的(简化)用例如下,我有一个带有布局片段的活动,这个片段自己包含一个子片段...所有片段都手动添加到他们的父母......

----------------------------------------------------------
- Activity                                               -
-                                                        -
-                                                        -
-     ---------------------------------------            -
-     - Fragment                            -            -
-     -                                     -            -
-     -    -----------------                -            -
-     -    - SubFragment   -                -            -
-     -    -               -                -            -
-     -    -               -                -            -
-     -    -----------------                -            -
-     ---------------------------------------            -
-                                                        -
----------------------------------------------------------

现在在我的活动中onCreate我做了以下事情:

if (savedInstanceState == null)
{
    // I create the fragment
    mMainFragment = new MainFragment();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_main, mMainFragment);
    transaction.commit();
}
else
{
    // I retrieve the fragment
    mMainFragment = (BaseFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_main);
}

在我的片段中,onCreate我得到/创建我的SubFragment:

mSubFragment = getChildFragmentManager().findFragmentByTag(SubFragment.class.getName());
if (mSubFragment == null)
{
    mSubFragment = new SubFragment();
    getChildFragmentManager().beginTransaction().add(R.id.fragment_sub, mSubFragment, SubFragment.class.getName()).commit();
}

问题

屏幕旋转后,我的SubFragment被添加两次......如果我使用活动,FragmentManager那么它可以工作......但为什么它不能用于ChildFragmentManager?当然,片段是一个新的片段,但是活动也是一个新片段,那么为什么它与活动有关FragmentManager,而与父片段无关?

在片段中,我应该使用片段ChildFragmentManager,不应该吗?

1 个回答
  • 您应该添加SubFragmentFragment像你添加相同的方式FragmentActivity.我的意思是添加FragmentActivity应该看起来像:

     @Override
     public void onCreate(Bundle savedInstanceState) {
       ....
       if (savedInstanceState == null){
          //add fragment
          mMainFragment = new MainFragment();
          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
          transaction.replace(R.id.fragment_main, mMainFragment);
          transaction.commit();
       }
     }
    

    添加SubFragmentMainFragment应该是这样的:

        public class MainFragment extends Fragment{
    
          @Override
          public View onCreateView(LayoutInflater i, ViewGroup c, Bundle savedInstanceState) {
               ...
            if (savedInstanceState == null){
               mSubFragment = new SubFragment();
    
               //add child fragment
               getChildFragmentManager()
                       .beginTransaction()
                       .add(R.id.fragment_sub, mSubFragment, "tag")
                       .commit();
            }
          }
        }
    

    或者您可以FragmentonCreate方法中 添加子片段

    2023-02-09 12:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有