ViewPager是Android V4包中的一个控件,常常用来作为首页的滚动广告,也常常结合Fragment来实现页面的切换效果。

ViewPager和ListView有很多相似的地方,都是适配器控件,要在其中展示数据,都需要设置适配器。ViewPager的常用的适配器类有两个:PagerAdapter和FragmentPagerAdapter,分别用来展示普通的布局页面和Fragment页面。下面我们来一一介绍。

1、ViewPager加载普通页面:

当我们需要使用ViewPager加载普通页面的时候,我们需要为ViewPager设置一个适配器,这个适配器必须是PagerAdapter的子类,因此,我们需要创建一个继承自PagerAdapter的子类,在这个类中实现或重写getCount()、isViewFromObject()、destroyItem()、instantiateItem()方法。

  • getCount()方法:获取ViewPager中的页数;
  • isViewFromObject()方法:ViewPager中的数据是否是直接从提供的数据源中加载的,一般返回view == object就可以了;
  • destroyItem()方法:从ViewPager中删除这一页,这个方法通常是删除三张以前的页面,其目的是资源回收。我们需要做的是从数据源中取出当前需要销毁的页面,调用removeView()方法删除即可。
  • instantiateItem()方法:加载页面方法。在这个方法中创建页面,适配数据,然后return。

具体的代码如下:

public class MyPageAdapter extends PagerAdapter {
private int[] resources; private List<View> views; private LayoutInflater inflater; public MyPageAdapter(Context context, int[] resources) {
this.resources = resources;
this.views = new ArrayList<>();
this.inflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return resources.length;
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
} @Override
public Object instantiateItem(ViewGroup container, int position) {
View view = inflater.inflate(R.layout.pageritem_page, container, false);
ImageView iv = (ImageView) view.findViewById(R.id.image);
iv.setImageResource(resources[position]);
container.addView(view);
views.add(view);
return view;
}
}

2、ViewPager加载Fragment:

当我们需要使用ViewPager加载Fragment的时候,我们需要为ViewPager设置的适配器类必须是FragmentPagerAdapter类的子类,并且实现其中的getCount()方法和getItem()方法。

  • getCount()方法:获取设置ViewPager中Fragment的数量
  • getItem()方法:根据position参数获取到当前加载的Fragment对象

具体的代码如下:

public class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments; public MyPagerAdapter(FragmentManager fm) {
super(fm);
} public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
} @Override
public Fragment getItem(int position) {
return fragments.get(position);
} @Override
public int getCount() {
return fragments.size();
}
}

以上就是对ViewPager的简单使用的介绍,下面贴出码云上的源码,供大家参考。

DEMO地址

【Android - V】之ViewPager的使用的更多相关文章

  1. Android ActionBar与ViewPager合用

    内容可以左右滑动,因为使用了ViewPager(我这里用了V4包) view_pager_main.xml <?xml version="1.0" encoding=&quo ...

  2. Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)

    Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下:       1.Vi ...

  3. Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?

    DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...

  4. Android控件-ViewPager(仿微信引导界面)

    什么是ViewPager? ViewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用以实现左右滑动切换View的效果. 如果想向下兼容就必须要android-support-v ...

  5. Android中Fragment+ViewPager的配合使用

    官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...

  6. Android开发之ViewPager的简单使用

    ViewPager是V4包中的,如果你的编译器敲不出ViewPager,那么你就需要添加,看下面: 第一步:点击+号 第二步:选择第一个Library 第三步:添加这个包: 然后点击ok-->o ...

  7. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  8. Android:给ViewPager添加切换效果

    原文参照开发者官网:http://developer.android.com/training/animation/screen-slide.html#viewpager 以App的引导页为例: 首先 ...

  9. Android随笔--使用ViewPager实现简单地图片的左右滑动切换

    Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布 ...

  10. Android Material Design:ViewPager与android.support.design.widget.TabLayout双向交互联动切换

    通常,android.support.design.widget.TabLayout与Android的ViewPager联合使用,实现与ViewPager的切换与联动.(1)比如,当用户手指触摸选择T ...

随机推荐

  1. AS3.0面向对象的写法,类和实例

    package /*package是包路径,例如AS文件在ActionScript文件夹下,此时路径应为package ActionScript.必须有的.package中只能有一个class,在一个 ...

  2. __isset()检测类内部变量是否设置

    __isset()--检测类内部私有变量是否存在 当执行isset方法时自动执行 class Per{ private $name; private $age; function __construc ...

  3. Cohort Analysis Using Python

    Cohort Analysis是将某一个时期内的用户划分为一个cohort,并将多个cohort进行时间上的某个属性的比较的一种分析方法.Cohort Analysis在有些场景下非常有用.比如一个网 ...

  4. 【python之旅】python的面向对象

    一.面向过程 VS 面向对象 1.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,实现一个任务的 ...

  5. 关于script,first,second,third=argv运行出错的问题

    from sys import argv input(argv) #python自带的IDLE直接执行不能提供命令行参数 script,first,second,third=argv print(&q ...

  6. windows通过Composer安装yii2

    1. php.ini 中;extension=php_openssl.dll(取消注释,不然在安装composer过程中会报错) 集成环境最好去php目录中打开php.ini文件,确定;extensi ...

  7. const变量与define定义常量的区别

    一.概念性区别 const 变量就是在普通变量前边加上一个关键字const,它赋值的唯一机会就是“定义时”,此变量不能被程序修改,存储在rodata区. define定义的是常量,不是变量,所以编译器 ...

  8. Hibernate validator验证

    spring-mvc配置 <mvc:annotation-driven validator="validator" /> <bean id="valid ...

  9. 转载:如何避免代码中的if嵌套

    http://top.jobbole.com/4960/ http://stackoverflow.com/questions/24430504/how-to-avoid-if-chains 在Sta ...

  10. hadoop的一些重要配置参数

    hadoop集群管理内存设置 Mapreduce内存使用设置 hadoop job重要性能参数