• 关于ViewPager的适配器之——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
      

         

                                                                                                                                     

  • 相关阅读:
    大型web系统数据缓存设计-l转载
    HDFS 原理、架构与特性介绍--转载
    golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值
    Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路
    ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性!
    换npm yarn的源让install超时去死吧
    nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
    Faas 典型场景——应用负载有显著的波峰波谷,典型用例-基于事件的数据处理
    docker run Influxdb
    在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用——daocloud国内镜像加速
  • 原文地址:https://www.cnblogs.com/chengxuxia/p/6648432.html
Copyright © 2020-2023  润新知