关于ViewPager的适配器之——pagerAdapter加载缓存页面的机制

本文详细介绍了使用PagerAdapter加载ViewPager缓存页面的机制。包括PagerAdapter的四个核心方法:getCount(), instantiateItem(), isViewFromObject(), destroyItem()的具体实现与作用。并通过实例说明了PagerAdapter如何在用户滑动时实例化并缓存页面。

ViewPager有很多的适配器,如pagerAdapter,FragmentPagerAdapter等,

今天我想重点谈的是关于pagerAdapter加载缓存页面的机制的问题。

首先,使用pagerAdapter一般需要重写它的四个未实现的方法分别是:

 

 
1.  getCount(){} //得到总数

 

 

 

 2.    //实例化页面,  相当于BaseAdapter等适配器中的 getView()方法 返回想要显示的对象(内容)

     // 不同之处是:这里需要把这些对象(内容)一一添加到adapter之中
  instantiateItem(VIewGroup container,int position);//container  是ViewPager本身
  {     //如下:  
 ImageView imageView = imageViews.get(position);
 container.addView(imageView);//添加到Viewpager中
 return imageVIew;

    }   

 


 3.  //比较view和object是否同一个实例
    isViewFromObject(View view,Object object)//View 当前的对象(页面),object 上面的这个方法 instantiateItem()返回的结果
   //如下:                                
     {
 if(view == object){
  return true;
             }else{
  return false;
             }
       //return view == object;一句话搞定
     }        

 

 

                          
4.    //释放资源
    destroyItem(ViewGroup container,int position Object object)
   {     //container  ViewPager本身
        //object   要释放的页面
     //position  要释放的位置
        //super.destroyItem(container, position, object);//注意这一句要注销了
      container.removeView(object);

    }

 

 

 

     注意: PagerAdapter一创建出来的时候只会先加载两个页面(一个显示给我们看 一个是先缓存着,假设为页面A,B) ,
                    接着我们手指向左滑动的时候 便会显示上一步中已经实例化好的页面 ,

                   然后同时再实例化出一个新的页面(这个新的页面先缓存着,以便即将到来的显示,假设为页面C),


                    这个时候便缓存着三个页面了(分别是页面A,,正在显示的页面B,即将显示的页面C)
                   以此类推, 再往左滑动 便又显示上一步中已经实例化好的页面 然后会再实例化好下一个新的页面 同时销毁原先第一个页面
    (即PagerAdapter中最多只会缓存三个页面 ,多出来的页面会通过销毁前面的页面来实现
                            我们在看到一个画面的时候 它已经为我们实例化好下一个页面了(先为我们准备着))


                所以  在PagerAdapter 中
                       实例化的方法instantiateItem()中的position会比其他的position多1
  

     

 

 

                                                                                                                                 

 

转载于:https://www.cnblogs.com/chengxuxia/p/6648432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值