转载 http://blog.csdn.net/yan8024/article/details/47024117
提供一个适配器用于填充ViewPager页面. 你很可能想要使用一个更加具体的实现, 例如: FragmentPagerAdapter or FragmentStatePagerAdapter.
当你实现一个PagerAdapter时,至少需要覆盖以下几个方法
instantiateItem(ViewGroup, int)
这个函数的实现的功能是创建指定位置的页面视图.适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key(最后我们举个例子试试可不可行)
destroyItem(ViewGroup, int, Object)
该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图
getCount()
返回当前有效视图的个数
isViewFromObject(View, Object)
该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图
public class PayKeyAdpater extends PagerAdapter { private ImageView ivKeyImage; private List<ImageView> ivKeyImageList; public ViewPager vpKeyView; private Context objContext; public PayKeyAdpater(Context context,ViewPager vp,List<ImageView> imageList) { ivKeyImageList = imageList; objContext = context; vpKeyView = vp; } @Override public int getCount() { return Integer.MAX_VALUE; // return ivKeyImageList.size(); } /** * 官方提示这么写 * View是拖动的对象 * object 是下面instantiateItem返回的对象 看是否是object是View只有他们关联才可以去查询当前的info */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 加载item * */ @Override public Object instantiateItem(ViewGroup container, int position) { position=position%ivKeyImageList.size(); //得到当前的第几个 vpKeyView.addView(ivKeyImageList.get(position)); //添加那个view到vp //container.addView(ivKeyImageList.get(position), 0);//添加页卡 return ivKeyImageList.get(position); } /** * 销毁对象 * position 被销毁的对象的索引 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { position=position%ivKeyImageList.size(); vpKeyView.removeView(ivKeyImageList.get(position)); } }