PagerAdapter
官方:http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
相关博客:
类信息:public abstract class PagerAdapter extends Object
简介:用于向ViewPager中填充页面的基类。针对具体的ViewPager我们可能需要扩展这个基类,官方提供了两个标准示范:FragmentPagerAdapter和FragmentStatePagerAdapter.
当需要扩展这个类时,我们至少需要重写以下四个方法:
1、instantiateItem(ViewGroup,int)
2、destroyItem(ViewGroup,int, Object)
3、getCount()
4、isViewFromObject(View,Object)
PagerAdapter比AdapterViews更具普遍性。在视图更新时,ViewPager采用回调方法来标识执行的每一步,而不依赖于View的回收机制。PagerAdapter可能实现一系列View回收方法或则采用一个更加复杂的方法来管理每个页面,比如使用Fragmenttransactions来管理每个Fragment页面。
ViewPager通过key对象关联到各个页面,而不是直接去管理这些页面。这个key对象用来跟踪和标识各个页面,而不与页面在adapter中的具体位置相关。调用startUpdate(ViewGroup)时表示ViewPager的内容将要发生改变,这样instantiateItem(ViewGroup, int) 与destroyItem(ViewGroup, int, Object)两个方法就会被一次或多次调用,内容更新完成后,finishUpdate(ViewGroup)会被调用。instantiateItem(ViewGroup,int)将返回代表添加的页面的key对象,这个对象与对应的页面关联,它可以就是这个页面对象本身,但大多时候都设计为其他专门用于绑定的key对象。destroyItem(ViewGroup,
int, Object)则会移除删除页面对应的Key对象。isViewFromObject(View view1, Object key1)方法用于标识view1是否与key1关联。使用view对象本身作为它的key值确实是一个简便方法,此时isViewFromObject方法体内就是:return view == object;。
PagerAdapter支持页面更新,页面更新必须在主线程中调用notifyDataSetChanged()方法完成,这和BaseAdapter中的更新方法是类似的。页面的更新可能是添加、删除、或则简单的更改页面位置。
常量:
1、public static finalint POSITION_NONE
表示这个item已经不再pagerAdapter中。
2、public static finalint POSITION_UNCHANGED
表示这个item在pagerAdapter中的位置未改变。
公共方法:
1、 public void destroyItem (ViewGroup container, int position, Objectobject)
移除指定位置的页面。移除操作将在finishUpdate(ViewGroup)方法返回前完成。
参数:
container:页面所在的View容器
position:页面所在位置
object:与instanitateItem(View,int)返回的方法相同
2、 public void finishUpdate (ViewGroup container)
当所有页面更改(包括所有添加、移除操作)完成时被调用。
3、 public abstract int getCount ()
返回页面数量。
4、public intgetItemPosition (Object object)
获得key为object的页面所在的位置。它可以用来判断页面位置是否已经改变,如果页面位置未改变,将返回POSITION_UNCHANGED(-1),如果页面已经不存在,则返回POSITION_NONE(-2);如果页面位置已经改变,则返回页面新的位置。
默认的实现返回POSITION_UNCHANGED(-1)。
5、public CharSequencegetPageTitle (int position)
获得指定位置页面的title。默认的实现返回null。
6、public floatgetPageWidth (int position)
返回页面宽度相对与ViewPager宽度的百分比。
7、public ObjectinstantiateItem (ViewGroup container, int position)
在指定位置创建一个页面。这个操作在finishUpdate(ViewGroup)返回前完成。
8、public abstractboolean isViewFromObject (View view, Object object)
判断一个页面的view对象是否与object相关联。即object是否是他的key。
9、public voidnotifyDataSetChanged ()
当adapter的内容和关联页面发生变化使用这个方法来更新页面。
10、public voidregisterDataSetObserver (DataSetObserver observer)
注册一个obsever(观察者)用于接收数据变化的回调。
11、public voidrestoreState (Parcelable state, ClassLoader loader)
恢复状态,这个状态是由saveState()方法保存的。
12、public ParcelablesaveState ()
保存adapater及其关联页面的状态。
13、public voidsetPrimaryItem (ViewGroup container, int position, Object object)
设置ViewPager主页。
14、public voidstartUpdate (ViewGroup container)
当已显示的页面发生变化时调用这个方法。
15、public voidunregisterDataSetObserver (DataSetObserver observer)
取消注册这个obsever观察者。