ViewPager+Fragment第二次打开Frgament为

作者: 曹_YouXing | 来源:发表于2017-03-25 22:27 被阅读0次

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

    问题描述.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遇到的问题已经总结,有不对的地方,望各位多多指点,共同学习。

    相关文章

      网友评论

        本文标题:ViewPager+Fragment第二次打开Frgament为

        本文链接:https://www.haomeiwen.com/subject/wkhhottx.html