当一个界面有多个ViewPager的时候,如果出现某一个不显示的情况
这个问题第一次出现,完全没有头绪,后来看了别人的说明之后实验了一下,确实是这种问题。
转自:http://blog.****.net/hknock/article/details/50629754
多个ViewPager引发的Fragment未初始化
本文主要介绍ViewPager FragmentPagerAdapter中Fragment缓存的规则。
可能需要在一个Activity中显示多个ViewPager,如GridView或ListView中以ViewPager做Item。
在Fragment的onCreateView函数中添加断点,结果发现只有第一个ViewPager的Fragment被初始化了。
排查发现在FragmentPagerAdapter中的instantiateItem函数中FragmentManager以Container的id加fragment的position为标记。导致第一个ViewPager的position初始化后进了缓存,第二个ViewPager的position1就直接从缓存中获取数据,查看FragmentPagerAdapter源码如下:
从上红圈标记的地方可以看出查找Fragment的规则,其中container.getId为ViewPager父View的id,position为fragment的位置。
针对上面的makeFragmentName规则,我们有两种解决方法:
1、自己复制FragmentPagerAdapter中的内容,重写一个PagerAdapter,修改其中的makeFragmentname规则,推荐使用此种方法。
2、改变上面container.getId,即ViewPager父View的idcontainerId。不过这种方式只是用于ViewPager较少的情况,否则改起来比较麻烦
因为我的问题是有两个轮播图的情况下,第二个轮播图不显示,所以才用了第二种方法。在次记录下,方便以后查用。