Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – ViewPager在屏幕旋转时保留旧片段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ViewPager和FragmentStatePagerAdapter来显示片段.最初有2个片段添加了Fragment1和Fragment2,第3个片段Fragment3在收到服务器的响应后在第2个位置添加.因此,在添加所有@L_675_4@之后,这应该是ViewPager中的片段序列 – > Fragment1,Fragment3,Fragment2.

问题是在添加了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;
            }
        }

解决方法

仅在FragmentpagerAdapter中覆盖此方法
@Override
public void destroyItem(ViewGroup container,int position,Object object) {
       // TODO Auto-generated method stub
       super.destroyItem(ViewGroup container,Object object);
}

然后删除super.destroyItem(ViewGroup容器,int位置,Object对象);你的代码

大佬总结

以上是大佬教程为你收集整理的android – ViewPager在屏幕旋转时保留旧片段全部内容,希望文章能够帮你解决android – ViewPager在屏幕旋转时保留旧片段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。