多个ViewPager引发的Fragment未初始化-阿里云开发者社区

开发者社区> 云原生> 正文
登录阅读全文

多个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源码如下:

instantiateItemmakeFragmentName
从上红圈标记的地方可以看出查找Fragment的规则,其中container.getId为ViewPager父View的id,position为fragment的位置。
针对上面的makeFragmentName规则,我们有两种解决方法:
1、自己复制FragmentPagerAdapter中的内容,重写一个PagerAdapter,修改其中的makeFragmentname规则,推荐使用此种方法。
2、改变上面container.getId,即ViewPager父View的idcontainerId。不过这种方式只是用于ViewPager较少的情况,否则复制很恶心的。。。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章
最新文章
相关文章