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. Git (1)

    对于程序员来说,版本管理工具可称得上是必需品.越来越多的版本管理开始使用Git,特别是Github的流行更加使得大家对于Git越来越关注.因此对于Git的学习是非常必要和重要的. 先看几个好玩的数据: ...

  2. http server v0.1_http_parse.c

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include "mime.h&q ...

  3. tyvj P1075 - 硬币游戏 博弈DP

    P1075 - 硬币游戏 From price    Normal (OI)总时限:10s    内存限制:128MB    代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...

  4. prototype.js 源码解读(01)

    prototype.js是一个设计的非常优雅且很有实用价值的js基础类库,其源码非常值得研究.研究它的源码不仅能提升个人水平,而且对你打下坚实的js基础也很有帮助.因本人技术水平有限,该解读仅供参考. ...

  5. Qt中事件处理的方法(图文并茂,仔细看看)

    http://blog.csdn.net/qing666888/article/details/14111271 http://blog.csdn.net/qing666888/article/det ...

  6. VMware Workstation 不可恢复错误: (vcpu-0)

  7. c++ RAII 资源管理就是初始化

    RAII:(Resource Acquisition Is Initialization),也就是“资源获取就是初始化”,是C++语言的一种管理资源.避免泄漏的惯用法.C++标准保证任何情况下,已构造 ...

  8. 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...

  9. Oracle 日期处理

    select * from dt where dw_data=to_date(to_char(sysdate-1,'YYYY-MM-DD'),'YYYY-MM-DD') ---取前一天日期 SQL&g ...

  10. JDK 1.6.0和 6.0 有啥区别,JavaTM SE 6 的平台名字和版本号的说明(转)

    一直这么理解,今天才看到官方的解释,真是有点汗颜. 核心就是 6.0用于平台和产品的名字,而1.6.0用于开发者. 他们指的是同一个东西. 原文地址:http://java.sun.com/javas ...