大佬教程收集整理的这篇文章主要介绍了android – ViewPager在屏幕旋转时保留旧片段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是在添加了Fragment1和Fragment3之后,如果我在第二个位置添加第三个片段,应用程序正在进行服务器调用,如果我多次进行屏幕旋转,那么在添加第三个片段之后它仍然显示最初在第二个位置处于第二个位置的Fragment2的旧副本位置和第三位置有Fragment2的新副本.所以Fragment3 doest出现在ViewPager中.添加第3片段后的序列 – > Fragment1,Fragment2的旧副本,新Fragment2.
我重写onSaveInstanceState并在我的Activity中调用super.onSaveInstanceState.
我也试过从getItemPosition返回POSITION_NONE.我在某处读到ViewPager保存片段的副本.同样通过调试我检查了ViewPager在重现问题时包含2个Fragment2副本,即使FragmentStatePagerAdapter的getItem为每个位置返回不同的Fragments但仍然在第2个位置它显示旧片段.为了在getItem中进行测试,我为所有位置返回了Fragment1,这样所有3个@L_675_4@都应该相同,但即使在第二个位置之后,当我再现上述步骤的问题时,它显示了Fragment2的旧副本.
那么如何清除ViewPager以便它不会保存旧片段.如何刷新ViewPager,以便它不会保留带有片段的旧副本.我认为问题在于onSaveInstanceState但我需要它.在onSaveInstanceState中保存视图时,如何排除ViewPager.我试过mViewPager.setSaveEnabled(false),但它占用了太多内存.
我发现问题是instantiateItem方法的适配器不会调用getItem,因为返回了旧的片段.
码:
@Override public Object instantiateItem(ViewGroup container,int position) { Object obj = super.instantiateItem(container,position); Fragment fragment = mFragments.get(position); if((obj!=null && fragment!=null) && !(obj.getClass().getSimplename().equals(fragment.clss.getSimplename()))){ destroyItem(container,position,obj); return super.instantiateItem(container,position); }else{ return obj; } }
以上是大佬教程为你收集整理的android – ViewPager在屏幕旋转时保留旧片段全部内容,希望文章能够帮你解决android – ViewPager在屏幕旋转时保留旧片段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。