定义
ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。
1)ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他的view类。 2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。(和ListView的Adapter差不多) 3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
|
ViewPager的行动机制
默认情况下ViewPager最多缓存三个页面,当前屏幕看到的和左边一个,右边一个,三个页面。 当页面进入到这个范围时,调用instantiateItem方法创建页面,当离开这个范围时,调用destroyItem方法,销毁页面
|
PagerAdapter适配器
至少实现如下的4个方法,如果需要更好的扩展也可以实现更多的方法。
//1:-- 告诉viewPager 有多少个页面 public int getCount() { return Position; };
/** *2:-- 实例化条目,页面 该方法有二件事要干 * a-根据position 获得一个view 并添加至 container * b-返回一个和view 有关系的对象 * @param container 其实就是viewPager自己 * @param position 要创建的页面的下标 */ public Object instantiateItem(ViewGroup container, int position) {
return position; };
/** *3:-- 判断view 与object 之间的关系 * view 是 instantiateItem方法中添加至container 中的view * object 是 instantiateItem方法中的返回的对象 */ public boolean isViewFromObject(View view, Object object) {
return view==object; };
/** *4:-- 当需要销毁某个条目时,调用此方法 * container 其实就是ViewPager 自己 * position 要销毁的条目的下标 * object 是instantiateItem 方法的返回值 */ public void destroyItem(ViewGroup container, int position, Object object) {
// 下面这句必须删除,否则会崩,原因,你懂的。 //super.destroyItem(container, position, object);
// 我们的任务,就是根据position 和 object 找到view 然后,从container 删除 container.removeView((View)object);
}
|
设置页面改变时的监听
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/** * 当页面选择发生改变时,调用此方法 * @param position 新选择的页面的下标 */ public void onPageSelected(int position) {
}
// 当页面滑动时,不断调用此方法 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
// 当页面的滑动状态发生改变时 public void onPageScrollStateChanged(int state) { } });
|
viewPager与fragment 结合使用的步骤
为什么要和fragment一起使用:子界面比较简单,我们可以直接使用控件填充,
如果子界面比较复杂,我们可以采用Fragment填充。另外还可以使用自定义Pager
1- 将类改变继承自FragmentActivity
2-创建adapter 继承自FragmentPagerAdapter,实现其中的二个方法 和一个构造方法
getCount(); -- 告诉viewPager 页面的个数
getItem(intposition) -- 根据位置获得对应的fragment
3-将adapter 设置给viewPager 即可
FragmentPagerAdapter与FragmentStatePagerAdapter的异同:
***相同之处,使用方法 ,功能,完全一样
***不同之处:
**FragmentPagerAdapter 会对fragment进行缓存
*适用于,页面比较多,但每个页面都不大的场合
**与FragmentStatePagerAdapter不会对fragment 进行缓存
*适用于,页面个数不多,但每个页面都比较大的场合
viewPager常用的方法
//让viewPager切换到指定的页面
viewPager.setCurrentItem(position);
//屏蔽ViewPager的预加载功能
LazyViewPager(懒的ViewPager)
功能:屏蔽ViewPager的预加载功能(ViewPager内部显示的每一个界面比较复杂,如果预加载,可能内存溢出)