关于 ViewPager 里面嵌套 ViewPager ,里面的 Fragment 不显示的问题

最近项目有个需求是上下滑动切换章节,左右滑动切换章节里的页面.
这个需求想了一下决定利用 ViewPager 嵌套的方法做.

遇到了两个问题:

1.内层的 Fragment 没有显示出来
在 Fragment 中嵌套 ViewPager,然后 ViewPager 中呈现 Fragment 的时候, 页面一直空白,可能的原因就是在初始化 Adapter的时候使用了 getFragmentManager() ,getFragmentManager()到的是 Activity 对所包含 Fragment 的 Manager,而如果是Fragment 嵌套 Fragment ,那么就需要利用 getChildFragmentManager() 了


new ViewPagerFragmentAdapter(getFragmentManager(), mFragments);
换成
new ViewPagerFragmentAdapter(getChildFragmentManager(), mFragments);

问题得到解决.

2.可能需要在一个 Activity 中显示多个 ViewPager , 如果里面的 ViewPager 的 id 相同,那么第二个 Fragment 里面的内容也不会显示.
查看源码主要是 makeFragmentName 规则问题,

两种解决办法:
1、自己复制 FragmentPagerAdapter 中的内容,重写一个 PagerAdapter,修改其中的 makeFragmentname 规则,推荐使用此种方法。

2、改变上面 container.getId,即 ViewPager 父 View 的 id containerId。不过这种方式只是用于 ViewPager 较少的情况,否则复制很恶心的。
简单来说就是修改 ViewPager 在布局里面的id, 保证 id 的不同命名。

当然我项目里的 ViewPager 比较少,我用的第二种.

记下此坑.
参考:http://www.trinea.cn/android/android-source-code-analysis/multi-viewpager-to-fragment-not-init/

希望能对大家有所帮助,欢迎大家一起讨论交流.


3952735fe4a07d74f844ab84d36c43b0_r.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,173评论 25 709
  • 2017年05月30 最后的懒加载写的不好,推荐请叫我大苏同学写的Fragment懒加载博客,【Android】再...
    英勇青铜5阅读 14,571评论 56 189
  • 作者:李旺成 时间:2016年5月3日 一、PagerAdapter介绍 先看效果图 PagerAdapter简介...
    diygreen阅读 83,198评论 38 309
  • 在一个风雨交加的夜晚,我走到爸妈房间,我听见了妈妈的惨叫声,爸爸大声吼道:贱人!那里还有钱?我还得出去泡妞呢!妈妈...
    晓君_阅读 1,540评论 1 1
  • 目标: 1、有个健康智慧的宝宝。 2、找一份与烘焙相关的销售运营工作学习经验,为芙禧芙私房馆工作室做准备。 感恩冥...
    孙煜涵阅读 864评论 0 0