ViewPager 工作机制

Android PageAdapter翻译

 

介绍: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时,至少需要覆盖以下几个方法:

PagerAdapter比AdapterView的使用更加普通.ViewPager使用回调函数来表示一个更新的步骤,而不是使用一个视图回收机制。在需要的时候pageradapter也可以实现视图的回收或者使用一种更为巧妙的方法来管理视图,比如采用可以管理自身视图的fragment。

 

1.pageradapter将要改变的时候他会调用startUpdate函数,接下来会调用一次或多次的instantiateItem或者destroyItem。最后在更新的后期会调用finishUpdate。当finishUpdate返回时 instantiateItem返回的对象添加到父ViewGroup ,destroyItem返回的对象从ViewGroup中删除。

2.destroyItem将会将该page从viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object。

3.pageradapter支持数据集合的改变,数据集合的改变必须要在主线程里面执行,然后还要调用notifyDataSetChanged更新。和Baseadapter非常相似。数据集合的改变包括页面的添加删除和修改位置。viewpager要维持当前页面是活动的,所以你必须重写其中的getItemPosition()方法。

 

Summary


Constants
intPOSITION_NONE 
intPOSITION_UNCHANGED 
Public Constructors
 PagerAdapter()
Public Methods
voiddestroyItem(ViewGroup container, int position, Object object)
移除给定位置的页面
voiddestroyItem(View container, int position, Object object)
该方法已废弃.使用 destroyItem(ViewGroup, int, Object)替代
voidfinishUpdate(View container)
该方法已废弃.使用 finishUpdate(ViewGroup)代替
voidfinishUpdate(ViewGroup container)
当显示界面加载完成时调用该方法
abstract intgetCount()
返回可用的视图数量.
intgetItemPosition(Object object)
如果item位置没有发生改变则返回POSITION_UNCHANGED如果发生了改变则返回POSITION_NONE
CharSequencegetPageTitle(int position)
设置当前位置上的ViewPager的标题
floatgetPageWidth(int position)
返回position位置测量的页面的宽高比例范围是(0.f-1.f]
ObjectinstantiateItem(ViewGroup container, int position)
根据指定的位置创建一个page item
ObjectinstantiateItem(View container, int position)
此方法已废弃,使用 instantiateItem(ViewGroup, int)代替
abstract booleanisViewFromObject(View view, Object object)
Determines whether a page View is associated with a specific key object as returned by  instantiateItem(ViewGroup, int).
voidnotifyDataSetChanged()
调用该方法更新数据
voidregisterDataSetObserver(DataSetObserver observer)
注册观察者
voidrestoreState(Parcelable state, ClassLoader loader)
恢复与adapter关联的所有页面的状态实例,并且该页面是通过saveState()方法保存的。
ParcelablesaveState()
保存于adapter关联的所有的页面,直到调用restoreState方法时被恢复
voidsetPrimaryItem(View container, int position, Object object)
This method is deprecated. Use setPrimaryItem(ViewGroup, int, Object)
voidsetPrimaryItem(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.
voidstartUpdate(View container)
该方法已废弃.使用 startUpdate(ViewGroup)代替
voidstartUpdate(ViewGroup container)
开始调用显示页面
voidunregisterDataSetObserver(DataSetObserver observer)
在回调函数中通过adapter的数据变化注销观察者对象
其中几个重要方法

一、instantiateItem (ViewGroup container, int position)

public Object instantiateItem (ViewGroup container, int position)

Create the page for the given position. The adapter is responsible for adding the view to the container given here, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup).

Parameters
container The containing View in which the page will be shown.
position The page position to be instantiated.
Returns
  • Returns an Object representing the new page. This does not need to be a View, but can be some other container of the page.
这个函数的实现的功能是创建指定位置的页面视图。适配器即将创建的View视图addView给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!

返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key(最后我们举个例子试试可不可行)


二、isViewFromObject (View view, Object object)
public 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). This method is required for a PagerAdapter to function properly.

Parameters
view Page View to check for association with object
object Object to check for association with view
Returns
  • true if view is associated with the key object object
功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)

返回值:如果对应的是同一个View,返回True,否则返回False。如 return view==object;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值