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. Oracle replace函数使用

    需求是要修改Oracle某列表中把这一列中全部的100换成200: update b_nodes a set a.childs=replace((select childs from b_nodes ...

  2. Android学习2--项目文件列表简单分析

    使用Eclipse创建的默认项目文件列表如下: src:src目录是Android工程的源程序目录,该目录用于存放Java项目的源代码 gen:gen目录存放所有自动生成的文件,在这个目录中最关键的文 ...

  3. SQL分页小Demo

    SELECT @TotalCount=count(1) FROM TableA A WITH(NOLOCK) INNER JOIN TableB B WITH(NOLOCK) ON A.Id=B.Id ...

  4. HTML 5结构

    进行总体布局时候,具体可以用的方法. 1.大纲:文档中各内容区块的结构编排. 内容区块可以使用标题元素来展示各级内容区块的标题. 关于内容区块的编排可以分为“显示编排”和“隐式编排”. 显示编排:明确 ...

  5. 新增的output元素 progress元素 meter元素 keygen元素

    结果图 <output>是双标签 name:定义对象的唯一属性 for:定义输出域相关的一个或多个元素. form:定义所属的一个至多个表单. progress和meter一般和JS一起使 ...

  6. 一个c++给程序打log的单例模式类

    开发过程中需要给程序打log. 所以照着网上写了个单例模式的log类 #ifndef MISCLOGWRITER_H_ #define MISCLOGWRITER_H_ #include <io ...

  7. 浙工大C语言入门指南 (仅供参考)

    C语言书籍推荐 浙工大图书馆中,计算机的书都集中在三楼TP区.我个人推荐下面这么几本书. <Head First C>.Head First系列的书质量基本都很高.该书有很多插图,总体上就 ...

  8. iOS 通知中心扩展制作初步-b

    涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...

  9. 转:阿里开源Mysql分布式中间件:Cobar

    原文来自于:http://hualong.iteye.com/blog/2102798 这几天研究了下Cobar, Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoeba的升级版,该产品成 ...

  10. Servlet处理Cookie

    1.CGI:进程,servlet:线程 2.HttpServletResponse下的方法就没有get开头的,(PrintWriter)getWriter在ServletResponse下. 3.st ...