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