官方英语原文地址:http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
(它是)基类,它提供适配器,该适配器能填充页面内容到ViewPager中。
你可能更喜欢使用它的特殊实现类,比如:FragmentPagerAdapter 或FragmentStatePagerAdapter。
当你实现一个PageAdapter的时候,你至少必须要重载(override)下面几个方法:
· instantiateItem(ViewGroup, int)--实例化条目
· destroyItem(ViewGroup, int, Object)--销毁条目
· getCount()--获取条目数量
· isViewFromObject(View, Object)
PagerAdapter,比AdapterViews所使用的适配器,更常用。
在更新过程中,ViewPager使用回调(callbacks),来指示到哪一步了,而不是提供一套View直接回收的机制。
如果需要的话,PagerAdapter可以实现一种View回收机制,或者使用一个更加复杂的方法,来管理page view,
例如,Fragment的处理方式:每个页面都由它自己的Fragment来展现。
ViewPager都关联一个key对象,而不是直接与Views关联。
这个key用来跟踪并唯一标识指定的页面,它独立于其在适配器中的位置。
对PagerAdapter的startUpdate(ViewGroup)方法的一次调用,标志着ViewPager的页面内容即将改变。
随后,会调用若干次instantiateItem(ViewGroup, int) 或destroyItem(ViewGroup, int, Object),
最后,会调用 finishUpdate(ViewGroup),这意味着本次更新将要结束了。
等到finishUpdate返回时,与instantiateItem返回的key对象关联的view,应该被添加到其父控件ViewGroup中了,
而与传递给destroyItem
的这些key关联的view,应该被移除了。
isViewFromObject(View, Object)方法用于判断某个view是否与key对象关联。
一个简单的PagerAdapter,可以用page Views本身当为key对象;
创建并添加到ViewGroup中后,可以instantiateItem(ViewGroup, int)中返回它;
对应的destroyItem(ViewGroup, int, Object)的实现,从父控件ViewGroup中删除它;
isViewFromObject(View, Object) 可以这样实现:return view == object;.
PagerAdapter支持数据集(data set)的变更更新。
但数据集变更,必须发生在主线程中,并且最后要调用notifyDataSetChanged()方法,
这点与从BaseAdapter派生的AdapterView的适配器,很相似。
数据集的改变,可以包含pages的添加,删除或位置改变。
ViewPager将保持当前的页面处于active状态,它由实现了getItemPosition(Object)方法的适配器提供。
public Object instantiateItem (ViewGroup container, int position)
在指定的位置创建页面;适配器负责添加view到这个容器中,然而它只保证在finishUpdate(ViewGroup)返回时才完成。
public void destroyItem (ViewGroup container, int position, Object object)
删除指定位置的页面;适配器负责从view容器中删除view,然而它只保证在finishUpdate(ViewGroup)返回时才完成。
public abstract int getCount ()
返回可用的view的数量。
public abstract boolean isViewFromObject (View view, Object object)
判断页面是否跟指定的key对象关联,key对象由instantiateItem(ViewGroup, int)返回。
ViewPager源码,你去看下addNewItem方法,会找到instantiateItem的使用方法,注意这里的mItems变量。然后你再搜索下isViewFromObject,会发现其被infoForChild方法调用,返回值是ItemInfo。再去看下ItemInfo的结构,其中有一个object对象,该值就是instantiateItem返回的。
也就是说,ViewPager里面用了一个mItems(ArrayList)来存储每个page的信息(ItemInfo),当界面要展示或者发生变化时,需要依据page的当前信息来调整,但此时只能通过view来查找,所以只能遍历mItems通过比较view和object来找到对应的ItemInfo。
简单的说就是PageView有个私有属性private final ArrayList<ItemInfo> mItems = new ArrayList<ItemInfo>();当调用addNewItem(int,int)时
void addNewItem(int position, int index){ ItemInfo ii = new ItemInfo(); ii.position = position; ii.object = mAdapter.instantiateItem(this, position); if (index < 0) { mItems.add(ii); } else { mItems.add(index, ii); } }
相关推荐
主要介绍了详解Android App中ViewPager使用PagerAdapter的方法,同时附带了一个ViewPager的PagerAdapter不能更新数据的问题解决方法,需要的朋友可以参考下
主要给大家介绍了关于android仿Adapter实现自定义PagerAdapter的相关资料,文中详细介绍了关于PagerAdapter的用法,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
关于ViewPager + Fragment的使用,已经有FragmentAdapter的实现可以帮助我们快速进行开发了,但是每次使用ViewPager + View都要自己去继承PagerAdapter并实现,重写那些我们写过一次又一次的方法,于是决定对其进行...
博客地址:http://blog.csdn.net/dmk877/article/details/50060745,ViewPager中PagerAdapter的用法详解
用于viewPager和Fragement制作滑动效果的自定义PagerAdapte,用法请参考我写的博文《使用fragment控件制作左右滑动画廊和欢迎界面》
一个ViewPager和PagerAdapter可以: 自动滚动(开/关功能) 无限循环(具有开/关功能) 可调自动滚动间隔 如果只有一项,则不会滚动也不循环 与notifyDataSetChanged()一起很好地工作 支持页面指示器 支持不同...
ViewPager中ViewPager的使用,如何处理触摸事件的冲突和Fragment适配器。
网上有很多使用ViewPager实现左右滑动这一效果的资料,这些资料大多数都是将PagerAdapter中getCount()方法的返回值设为Integer.MAX_VALUE使用户看不到边界,然后在instantiateItem()方法中通过position%(要循环...
您可以将其与“ PagerAdapter ” PagerAdapter (使用Views PagerAdapter寻呼机), 但你也可以使用FragmentPagerAdapter它允许你以填补寻呼机Fragments ! ViewPager实际上将创建2个其他视图/片段来伪造无限循环...
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。...在Activity里实例化ViewPager组件,并设置它的Adapter(就是PagerAdapter,方法与ListView一样的),在这
viewpager的使用方法 1. 实现一个PagerAdapter的子类MyPagerAdapter。 2. 实现里面的4个方法。 3. getCount()返回当前的viewpager里面有几页。 4. isViewFromObject()内部优化的逻辑 return view == object; 5....
ViewPager是android-support-v4.jar包里的组件。在布局文件里标签需要连包名一起 写全称 基本用法 ViewPager的基本用法我概括为三步 ...也是android.support.v4.view包里的,继承类需要实现四个方法
前言 很多人要实现轮播图都会想到使用ViewPager + Handler来...在此我也就不对它的使用方法进行过多的介绍了。直接开始介绍轮播的方法。 常见的轮播操作 private class ImageAdapter extends PagerAdapter{ priva
在如今的互联网时代,微信已是一个超级... ViewPager的使用很简单,通过setAdapter()方法设置一个PagerAdapter即可,这个PagerAdapter需要自己写,实现里面的一些方法。本篇要和Fragment结合,所以实现的是FragmentPag
#AuthorWangjia55()Blog:#效果图:#使用方法也非常简单mPagerAdapter = new PagerAdapter(getSupportFragmentManager());mViewPager.setAdapter(mPagerAdapter);List mListTabs = Arrays.asList("短信", "收藏", ...
5、引用ViewPagerIndicator库,将viewpager和mIndicator关联起来,必须在viewpager设置完adapter后才能调用,重写PagerAdapter方法及自定义样式修改 6、下拉刷新和上拉加载更多,布局安排以及动画的设置。 7、三级...
将viewpager和mIndicator关联起来,必须在viewpager设置完adapter后才能调用,重写PagerAdapter方法及自定义样式修改 6、下拉刷新和上拉加载更多,布局安排以及动画的设置。 7、三级缓存 内存缓存:优先加载, 速度最...
问题描述: 使用Design包的TabLayout实现类似...不要为ViewPager手动使用addTab()方法添加标题,而应该先创建一个List集合,将其设置在PagerAdapter的getPageTitle方法中,代码如下: @Override public CharSequence