欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题

程序员文章站 2022-10-29 14:59:56
前言 之前在做一个viewpager上面加载多个fragment时总会实例化已经创建好的fragmnet对象类似 viewpager.setadapter...

前言

之前在做一个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;
  }

以上所述是小编给大家介绍的android开发中如何解决fragment +viewpager滑动页面重复加载的问题 ,希望对大家有所帮助