关于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
  
 以上就是我在学习过程中对pagerAdapter关于缓存机制的一些个人看法,有理解错误之处,希望各位朋友能批评指出。

         -----爱生活,爱android.

时间: 2024-10-13 07:28:19

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

JQuery、AngularJs动态加载其他页面

1.JQuery的load函数 <script> $(function(){ $("#d1").load("page.html");//需要加载的页面 $.ajax({ type:"get", url:"http://localhost:3000/showAll", dataType:"jsonp", jsonpCallback:"cb", success:function(

PhoneGap 白名单安全机制 navigator.app 加载外部页面返回以及退出介绍

一. Phonegap 白名单安全机制 Phonegap应用的页面大多存在于本地,但有时需要加载外部的Web页面到应用内置的浏览器 视图中已完成特定的应用功能,出于安全性考虑,PhoneGap 设立了白名单安全机制,通过它来 控制能够加载到内置浏览器视图的内容来源. Android 不通过白名单安全机制的话调用外部浏览器 IOS 不通过白名单安全的话 会直接拒绝 二.Android 配置白名单 在res/xml/config.xml这个文件里进行配置 三.IOS 配置 以及 Wp7/wp8配置白

在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点

使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; set; } public string Url { get; set; } } 在HomeController中的Index方法,向视图传递一个Article强类型. public class HomeController : Controller { public ActionResult Ind

jQuery手机端上拉刷新下拉加载更多页面

<!doctype html> <html> <head> <title>jquery 手机端上拉刷新下拉加载更多页面</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta name="viewpost" content="width=device-wi

android网络图片加载缓存,避免重复加载。

1.主线程调用方法: imageView = new ImageView(this); AsynImageLoader asynImageLoader = new AsynImageLoader(); asynImageLoader.showImageAsyn(imageView, URL, R.drawable.nopicture); mViewList.add(imageView); 2.AsynImageLoader加载缓存:     public void showImageAsyn(I

安卓APP加载HTML5页面解决方案总结

由于H5页面在移动端的兼容性及扩展性方面体现出来的优势,又兼得APP中植入H5页面对应用的灵活性有大大的提升(如活动.游戏的更新等),APP开发不可避免的需要加载一些H5页面,但安卓客户端对网页内容的排版.整理.交互等可能会出现一些不可预料的问题.本文将对安卓端加载网页写一些比较通用,可能避免问题的统一的解决方法总结. 背景 一般对前端知识有所了解的都清楚,解析网页主要是靠页面渲染引擎和JS解析引擎,前者负责取得网页的内容(HTML.XML.图象等等).整理信息(例如加入CSS等),以及计算网页

在UIWebView加载的页面, WF: _WebFilterIsActive returning: NO

x iOS10下在UIWebView加载的页面, WF: _WebFilterIsActive returning: NO UIWebView加载了一个集成的微信支付SDK,在执行了webview的代理方法后,在回调支付结果的时候会出现奔溃WF: _userSettingsForUser mobile: {    filterBlacklist =     (    );    filterWhitelist =     (    );    restrictWeb = 1;    useCon

在aspx页动态加载ascx页面内容,给GridView控件绑定数据

在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx");//绑定到aspx页的PlaceHolder控件上PlaceHolder1.Controls.Add(c1); DataSet ds = SqlServerHelpr.GetDataSet("select * from dbo.Table_1");//给GridView控件绑定数据Grid

资源加载和页面事件 load, ready, DOMContentLoaded等

资源加载和页面事件 理想的页面加载方式 解析HTML结构. 加载并解析外部脚本. DOM树构建完成,执行脚本.//DOMInteractive –> DOMContentLoaded 加载图片.样式表文件等外部文件. 页面加载完毕.//window.onload 涉及到的事件 window.onload: 当页面全部加载完成(包括所有资源) document.onload: 当整个html文档加载的时候就触发了,也就是在body元素加载之前就开始执行了 DOMContentLoaded: 当页面