ViewPager+Fragment第二次打开Frgament为空白的解决方案

之前开发项目的时候,ViewPager嵌套Fragment的时候第二次切换回已经打开过Fragment的时候,此时Fragemnt显示为空白,当时遇到这个问题的时候,真是一头雾水,那会因为赶项目,就没去分析这个问题的产生原因,当时解决的时候在Activity中调用viewPager.setOffscreenPageLimit(N)此方法去解决,此方法代表viewPager切换的时候会重新创建当前界面左右的N个界面;

《ViewPager+Fragment第二次打开Frgament为空白的解决方案》 问题描述.gif

问题产生原因:就是onCreateView每次都调用导致的,这样每次打开fragment每次都会设置新的view,而调试发现,之前的view并没有被回收……这就导致了新的Fragment覆盖了我们之前的Fragment,这时候就出现了Fragemnt空白的现象。
解决方式:
1 viewpager.setOffscreenPageLimit(num);num为你的tab数,就是我使用的哪种方式

2 在Fragment中onCreateView里面,判断Fragment是否已经添加了contentView(第一次加载时,可以将view保存下 来,再 次加载时,判断保存下来的view是否为null),如果保存的view为null,返回新的view ,否则,先将 保存的view从父view中移除,然后将该view返回出去

   @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
      //判断该存不存在
        if(view != null){
            ViewGroup parent = (ViewGroup) view.getParent();
            if(parent != null){
               //存在就将其删除
                parent.removeView(view);
            }
        }
      
        view = View.inflate(getActivity(), R.layout.layout_one, null);
        tab_main = (TabLayout) view.findViewById(R.id.tab_main);
        return view;
    }

3 在ViewPager的Adapter中重写public void destroyItem(ViewGroup container, int position, Object object),去掉super.destroyItem(container, position, object);

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    //方法体中什么也不用写
    }

4

以上就是我对该ViewPager+Fragemnt遇到的问题已经总结,有不对的地方,望各位多多指点,共同学习。

    原文作者:曹_YouXing
    原文地址: https://www.jianshu.com/p/04ef6f0a6c01
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞