Fragment嵌套需要注意的问题

1.场景

底部导航的页面切换一般是用几个Fragment实现滑动点击切换的,那么在其中一个Fragment中需要实现顶部选项卡切换(举个栗子:网易新闻客户端的主页),这时候就需要在一个Fragment中嵌套Fragment来实现了。**以下外层的Fragment称为 "Fragment" ,里层的Fragment成为 "子Fragment" **

2.问题

但是在实现过程中经常会出现 子Fragment 无法显示的问题。

3.解决方法

  • 检查在 Fragment 给ViewPager设置Adapter时,传入Adapter的参数应该为getChildFragmentManager(),而不是getFragmentManager(),代码清单如下:
mAdapter = new MyPagerAdapter(getFragmentManager());

改为:

mAdapter = new MyPagerAdapter(getChildFragmentManager());
  • 如果此时还没有解决问题,需要把你的FragmentPagerAdapter改为FragmentStatePagerAdapter
    两者区别如下:
    FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。如文档所述,该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter

这样就可以正确显示了。

你可能感兴趣的:(Fragment嵌套需要注意的问题)