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。
这样就可以正确显示了。