解决Fragment +Viewpager滑动页面重复加载的问题

前言
之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似

   viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
               switch(position){
                case 0:
                fragments=new Fragmnet01();
                break;
                    case 1:
                fragments=new Fragmnet02();
                break;
                .....
            }

                return fragments;
            }

            @Override
            public int getCount() {
                return listTabs.size();
            }


        });

其实仔细想一下,这样是很不合理的,首先你一直实例化对内存是一种浪费另外Viewpager具有预加载性当我们加载某一个Fragmnet时它就会把它的左边和右边都会加载(开头和结尾例外。)所以为了防止重复加载浪费资源,我们可以使用一个对象数组来加载fragment,当每次位置为空的时候我们就可以在该位置上面加载一个布局具体代码

//定义一个对象数组并给定长度
 fragments=new MyFragment[listTabs.size()];

        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) 
            {
            //在这里判断如果Fragmnet[position]当前页面没有加载的话我们再次在上面加载
                if(fragments[position]==null){
                    //这里只是写一个构造方法把值传到fragment里面
                    MyFragment my = MyFragment.getInstance(listTabs.get(position).getId());
                    fragments[position]=my;
                }
                return fragments[position];
            }

            @Override
            public int getCount() {
                return listTabs.size();
            }


        });

在fragment里面当然你也可以用bundler来传值。


    public static MyFragment getInstance(int id){
        MyFragment myFragment=new MyFragment();
        Bundle bundle=new Bundle();
        bundle.putInt("id",id);
        myFragment.setArguments(bundle);
        return myFragment;
    }

版权声明:本文为qiaoshi96_bk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。