AT-PagerAdapter
关于PagerAdapter的粗略翻译
英文版api地址:PagerAdapter(自备梯子)
PagerAdapter
已知直接子类:FragmentPagerAdapter、FragmentStatePagerAdapter 类概述(Class Overview):
基类提供适配器(Adapter)来将一些页面装进ViewPager中。也许很有可能你想使用一些经过特殊继承实现后的子类,比如FragmentPagerAdapter或者FragmenStatePagerAdapter。
当你想实现一个PagerAdapter时,你最少得重载下面的四种方法:
- instantiateItem(ViewGroup,int)
- destroyItem(ViewGroup,int,Onject)
- getCount()
- isViewFromObject(View,Object)
PagerAdapter比AdapterViews更加具有普遍性,在视图更新过程中,PagerAdapter并没有直接采用视图回收重用策略(View recycling mechanism),而是使用的一系列的回调(callback)来指示更新过程中的各个步骤过程。如果要求的话,一个PagerAdapter也许会实现一个关于视图回收的表格,或者会使用一个十分复杂(sophisticated)的方法来管理每一页的视图,比如当每一页是fragment时,会用Fragment 事务处理(transaction).
在ViewPager中,它联系每一个页面是通过一个键对象(key object),而不是直接操作每个页面中的视图的。这些键对象被用来追踪和唯一标记ViewPager中的每一页,使得在适配器每一个(页)的位置变得独立。PagerAdapter中在调用startUpdate(ViewGroup)时,表明ViewPager中的内容将要发生变化了,在startUpdate(ViewGroup)调用之后,一个或者多个instantiateItem(ViewGroup,int)和/或者destroyItem(ViewGroup,int,Onject)将会陆续执行,最终调用的是finishUpdate(ViewGroup),来表更新已经结束了。等到finishUpdate(ViewGroup) 执行完成之前,那些和键对象联系起来的视图,应该在instantiateItem(ViewGroup,int)方法执行完成之前将其添加到父视图(parentviewgroup)中去,并且将那些要移除的有关的视图在destroyItem(ViewGroup,int,Onject)方法执行后完成移除。而isViewFromObject(View,Object)方法是用来标记一个视图是否和一个键对象所匹配。
一个简单PagerAdapter也许会使用这些被键对象化的页面视图,也就是说会在instantiateItem(ViewGroup,int)调用执行完毕之后会完成创建和添加视图到父布局中去,这时也就是被键对象化了。与instantItem(ViewGroup,int)对应的方法detroyItem(ViewGroup,int,Object)会移除父布局中指定的视图。最后,isViewFromOnject(View,Object)应该这样实现:return view == object;
PagerAdapter支持数据集的变化。应该注意的是:数据集变化必须发生(执行)在主线程中,并且notifyDataSetChanged()方法的调用就标志着数据集更新的结束。这点有点像AdapterView中所需的那些继承于BaseAdapter的适配器。数据集的变化包括页面的添加、移除或者改变位置。对应的ViewPager将会通过调用getItemPosition(Object)获得当前显示哪个页面,并且会保持当前页面的活力。
常量(Constants):
- public static final int POSITION_NONE
常量值:-2
- public static final int POSITION_UNCHANGED
常量值:-1
公有构造方法(Public Constructors):
public PagerAdapter ()
公有方法(Public Methods):
public void destroyItem(ViewGroup container,int position,Object object)
移除对应指定位置(position)的页面。适配器负责从container中移除这些视图,尽管它唯一保证在finishUpdate(ViewGroup)之前执行完!
public void finishUpdate(ViewGroup container)
当展示页面变化成功时调用该方法。此时应该确保所有的页面在适当的时候已经完成了添加、移除工作。
public abstract int getCount()
返回可用的视图数
public int getItemPosition(Object object)
当主视图尝试去判断一个子视图的状态位置是否发生变化时会调用此方法。返回POSITION_UNCHANGED表示指定子视图位置状态没有发生变化。POSITION_NONE表示子视图已经不存在于适配器中。
默认的实现是假设子视图没有发生变化,即返回POSITION_UNCHANGED
Returns:
int:对象的新位置索引,取址范围为[0-getCount()]、POSITION_UNCHANGED、POSITION_NONE
public CharSequence getPageTitle(int position)
当ViewPager想去获得一个字符串来分别描述特定的页面时,会调用该方法。当指定页面没有字符串来描述的话就会返回null。默认实现就是返回null
public float getPageWidth(int position)
返回相对于ViewPager的测量宽度的比例宽度,返回形式以百分比形式返回
public Object instantiateItem(ViewGroup container,int position)
创建指定页。适配器负责添加视图到父布局中去。该方法只确保它会在finishUpdate(ViewGroup)调用之前完成
Returns:
Object:返回的这个对象代表了新的一个页面(Page)。它不一定是一个视图View,有可能是一些其他的父布局(Container)。
public abstract boolean isViewFromObject(View view,Object object)
判断一个页面(Page)是否对应产生了一个唯一的键对象,而产生唯一键对象的过程是通过instantiateItem(ViewGroup,int)方法的调用和完成实现的。本方法保证了PagerAdapter能够运行正常。
public void notifyDataSetChanged()
此方法应该在应用中被调用。并且是在数据发生变化、对应的视图需要更新时才可调用。
public void registerDataSetObserver(DataSetObserver observer)
注册一个观察者来接收当数据发生变化时的回调。
public void restoreState(Parcelable state,ClassLoader loader)
恢复和当前适配器相关的任何实例状态,前提是你要在之前就通过saveState()方法保存了实例状态。
public Parcelable saveState()
保存任何和当前适配器有关的数据,以供在之后UI状态发生重建时的实例状态恢复
public void setPrimaryItem(ViewGroup container,int position,Object object)
调用该方法是为了告知适配器哪个子页面目前被视为主要的子页面。它对应的是给用户展示的当前页。
public void startUpdate(ViewGroup container)
当展示页有变化并且将要开始更新时会调用该方法。
public void unregisterDataSetObserver(DataSetObserver observer)
解除一个观察者对于数据变化时的回调方法的监视。
AT-PagerAdapter的更多相关文章
- ViewPager与PagerAdapter
ViewPager是一个可以用来滑动内部View的组件,他有一个老搭档PagerAdapter,我们这次就来看看他们这两位拍档的本事. 我们要使用ViewPager与PagerAdapter结合 首先 ...
- ViewPager 重新加载 及 PagerAdapter 使用
PagerAdapter 简介 PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter, FragmentStatePagerAda ...
- 理解PagerAdapter的instantiateItem()方法
在为ViewPager设置Adapter时肯定会用到PagerAdapter,Google Android文档对该类的定义如下: Base class providing the adapter to ...
- 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
转载:http://blog.csdn.net/dreamzml/article/details/9951577 ViewPager ViewPager 如其名所述,是负责翻页的一个 View.准确说 ...
- PagerAdapter 用法
PagerAdapter简介 PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter, FragmentStatePagerAdap ...
- Android成长日记-使用PagerAdapter实现页面切换
Tip:此方式可以实现页面切换 1. 创建view1.xml,view2.xml,view3.xml,main.xml 在main.xml中创建 <android.support.v4.view ...
- 可复用View的PagerAdapter
用PagerAdapter的时候会反复调用instantiateItem和destroyItem来创建和销毁View,没有复用性.这里封装了一个可复用View的PagerAdapter,给实现类留下的 ...
- Android Tab -- 使用ViewPager、PagerAdapter来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换,自动切换. 代码:https://github.com/ldb ...
- Android:ViewPager适配器PagerAdapter的使用
PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...
- Android Viewpager PagerAdapter update data 刷新界面数据
最近做的项目涉及到ViewPager数据刷新,网上的资料挺多,但是和现在做的这个不太相同,所以并没有找到有效的. 折腾了大半天,整理一下思路: 问题1: 后台刷新数据次数过多后,界面出现卡顿现象,判断 ...
随机推荐
- 2016-3-25突然推送大量消息的问题及查找 -- Sangit
起因:2016年3月25日 18:30 左右,突然接到客户投诉,说APP收到大量的任务推送消息,而且点击进去都是一些过期任务,我们将对此展开追踪,查找问题原因. 过程: 1.当时的第一反应是先查看re ...
- HDU ACM Eight
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 解题背景: 看到八数码问题,没有任何的想法,偶然在翻看以前做的题的时候发现解决过类似的一道题,不 ...
- firefox 对相对定位的TD元素渲染错误
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...
- Java IO (1) - InputStream
Java IO (1) - InputStream 前言 JavaIO一共包括两种,一种是stream,一种是reader/writer,每种又包括in/out,所以一共是四种包.Java 流在处理上 ...
- App启动加载广告页面思路
需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.今天我们就来开发一个广告 ...
- [支付]微信NATIVE扫码支付JAVA实现
步骤: 1.预订单 2.接受微信返回的url 3.将url转为二维码显示到页面上 4.扫码支付 5.接收微信的异步通知,在这步修改订单的状态 6.收到异步通知的同时给微信返回指定数据,告知对方已成功处 ...
- CSS基础(02)
CSS 选择器 1.CSS3 选择器简介 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 语法: 下面中"CSS" 列指示该属性是在哪个 CSS 版本中定义的.(C ...
- iOS开发-为程序添加应用设置
一.设置捆绑包 设置捆绑包是应用自带的一组文件,用于告诉设置该应用期望得到用户的哪些偏好设置. 新建设置捆绑包:Command+N,在iOS部分中的Resource,选择Settings Bundle ...
- foxpro常用命令
Visual FoxPro原名FoxBase,最初是由美国Fox Software公司于1988年推出的数据库产品,在DOS上运行,与xBase系列兼容.FoxPro是FoxBase的加强版,最高版本 ...
- OOP设计模式[JAVA]——03职责链模式
职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...