ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于在Fragment中嵌套Fragment后来回切换出现空白页的问题解决

2021-08-06 21:00:58  阅读:473  来源: 互联网

标签:FragmentPagerAdapter Fragment viewpager 空白页 嵌套 fragment 加载 页面


参照:https://www.jianshu.com/p/43d9994231a9

主要:把FragmentPagerAdapter 替换为FragmentStatePagerAdapter

今天在一个fragment里面嵌套了ViewPager,在ViewPager里面嵌套了3个Fragment,但是来回切换的时候,发现有的页面出现了空白,网上说是getChildFragmentManager()有问题,仔细排查以后,发现
在使用fragment+viewpager加载首页时,偶尔点进其他的页面会导致首页白屏的问题

首先,我们所写的Viewpager的adatper 有可能继承自三个类 一个是PagerAdapter,另一个是FragmentPagerAdapter,最后一个是FragmentStatePagerAdapter。

后两个都是PagerAdapter的子类,当然相比父类,我们优化了很多新的功能并且简化了很多代码。

说了这么多,主要原因还是因为对Frgament的生命周期不是很理解。

在每次加载viewpager的时候都会调用viewpager里面的OncreatView方法 所以会造成原有的已经加载好的view被新的页面所覆盖,导致在第二次打开viewpager的时候会显示空白。说说主要原因,是因为我们所自定义写的Adapter继承FragmentPagerAdapter,而FragmentPagerAdapter该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;而我们动态加载这些fragment的时候消耗的内存更多,所以导致我们在加载fragment的时候遇到了白屏。

所以选择继承自FragmentStatePagerAdapter才能解决问题,和 FragmentPagerAdapter 不一样的是,正如其类名中的 'State' 所表明的含义一样,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。

标签:FragmentPagerAdapter,Fragment,viewpager,空白页,嵌套,fragment,加载,页面
来源: https://www.cnblogs.com/wang-jingyuan/p/15110286.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有