介绍:ViewPager和PagerAdapter结合使用
public abstract class PagerAdapter extends Object
java.lang.Object | |
↳ | android.support.v4.view.PagerAdapter |
Known Direct Subclasses |
Class Overview
提供一个适配器用于填充ViewPager页面. 你很可能想要使用一个更加具体的实现, 例如: FragmentPagerAdapter
or FragmentStatePagerAdapter
.
当你实现一个PagerAdapter时,至少需要覆盖以下几个方法:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)
PagerAdapter比AdapterView的使用更加普通.ViewPager使用回调函数来表示一个更新的步骤,而不是使用一个视图回收机制。在需要的时候pageradapter也可以实现视图的回收或者使用一种更为巧妙的方法来管理视图,比如采用可以管理自身视图的fragment。
viewpager不直接处理每一个视图而是将各个视图与一个键联系起来。这个键用来跟踪且唯一代表一个页面,不仅如此,该键还独立于这个页面所在adapter的位置。当pageradapter将要改变的时候他会调用startUpdate函数,接下来会调用一次或多次的instantiateItem或者destroyItem。最后在更新的后期会调用finishUpdate。当finishUpdate返回时 instantiateItem返回的对象应该添加到父ViewGroup destroyItem返回的对象应该被ViewGroup删除。methodisViewFromObject(View, Object)代表了当前的页面是否与给定的键相关联。
对于非常简单的pageradapter或许你可以选择用page本身作为键,在创建并且添加到viewgroup后instantiateItem方法里返回该page本身即可
destroyItem将会将该page从viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object。
pageradapter支持数据集合的改变,数据集合的改变必须要在主线程里面执行,然后还要调用notifyDataSetChanged方法。和baseadapter非常相似。数据集合的改变包括页面的添加删除和修改位置。viewpager要维持当前页面是活动的,所以你必须提供getItemPosition方法。
Summary
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | POSITION_NONE | ||||||||||
int | POSITION_UNCHANGED |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PagerAdapter() |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
destroyItem(ViewGroup container, int position, Object object)
移除给定位置的页面
|
||||||||||
void |
destroyItem(View container, int position, Object object)
该方法已废弃.使用
destroyItem(ViewGroup, int, Object)替代 |
||||||||||
void |
finishUpdate(View container)
该方法已废弃.使用
finishUpdate(ViewGroup)代替 |
||||||||||
void |
finishUpdate(ViewGroup container)
当显示界面加载完成时调用该方法
|
||||||||||
abstract int |
getCount()
返回可用的视图数量.
|
||||||||||
int |
getItemPosition(Object object)
如果item位置没有发生改变则返回POSITION_UNCHANGED如果发生了改变则返回POSITION_NONE
|
||||||||||
CharSequence |
getPageTitle(int position)
设置当前位置上的ViewPager的标题
|
||||||||||
float |
getPageWidth(int position)
返回position位置测量的页面的宽高比例范围是(0.f-1.f]
|
||||||||||
Object |
instantiateItem(ViewGroup container, int position)
根据指定的位置创建一个page item
|
||||||||||
Object |
instantiateItem(View container, int position)
此方法已废弃,使用
instantiateItem(ViewGroup, int)代替 |
||||||||||
abstract boolean |
isViewFromObject(View view, Object object)
Determines whether a page View is associated with a specific key object as returned by
instantiateItem(ViewGroup, int) . |
||||||||||
void |
notifyDataSetChanged()
调用该方法更新数据
|
||||||||||
void |
registerDataSetObserver(DataSetObserver observer)
注册观察者
|
||||||||||
void |
restoreState(Parcelable state, ClassLoader loader)
恢复与adapter关联的所有页面的状态实例,并且该页面是通过saveState()方法保存的。
|
||||||||||
Parcelable |
saveState()
保存于adapter关联的所有的页面,直到调用restoreState方法时被恢复
|
||||||||||
void |
setPrimaryItem(View container, int position, Object object)
This method is deprecated. Use
setPrimaryItem(ViewGroup, int, Object) |
||||||||||
void |
setPrimaryItem(ViewGroup container, int position, Object object)
Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page.
|
||||||||||
void |
startUpdate(View container)
该方法已废弃.使用
startUpdate(ViewGroup)代替 |
||||||||||
void |
startUpdate(ViewGroup container)
开始调用显示页面
|
||||||||||
void |
unregisterDataSetObserver(DataSetObserver observer)
在回调函数中通过adapter的数据变化注销观察者对象
|