在Android开发中ViewPager的使用是非常广泛的,而它不仅仅能够实现简单的开始引导页,还可以结合Fragment并添加Tab作为选项卡或为显示大批量页面实现强大的顺畅滑动

下面介绍两种为ViewPager+Fragment添加Tab的方式:

第一种:

在MainActivity布局中定义一个ViewPager

在MainActivity中声明ViewPager并实现它的Adapter继承自FragmentPagerAdapter

首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:

1.在getItem中通过switch判定当前的ViewPager在第几个页面,返回对应的Fragment

2.getCount最简单,直接返回想要创建的ViewPager的页数

3.重写getPageTitle方法,通过其返回值来在标签上显示一些数据,(需要在创建标签时通过adapter调用该方法自己设置显示的数据)

4.在MainActivity中获取ActionBar对象,通过action.newTab创建标签,通过action的addTab方法为ViewPager添加标签(通过for循环中的adapter的getCount方法作为条件来添加对应数量的标签)

5.最后通过分别实现ViewPager和Tab的监听事件来实现ViewPager和Tab的一一对应

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.newTab().setTabListener(new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
});

第二种:

在CollectionDemoActivity的布局里存放一个ViewPager,并在顶部显示标签(需要写在ViewPager布局中)

在CollectionDemoActivity中声明ViewPager并实现它的Adapter继承自FragmentStatePagerAdapter

首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:

1.在getItem中绑定一个Fragment,并可以通过Bundle对其进行传值,最终返回fragment对象

2.同上

3.如果在布局中定义了ViewPager的顶部标签,需要在此重写getPageTitle方法,通过其返回值来在标签上显示一些数据

4.在getItem中所绑定的Fragment布局中,定义想要显示的布局即可,并在Fragment中通过getArguments获取到Bundle传递的值

注意:FragmentPagerAdapter和FragmentStatePagerAdapter的区别

1.通过继承FragmentPagerAdapter创建的Fragment对象会永久存储在内存中,因此通常用于显示少量pager页面,像选项卡

2.通过继承FragmentStatePagerAdapter只会保留至多三个pager页面(即当前页面,前一个和后一个,如果当前页面为首个,则只会存在两个),因此通常用于显示比较多的pager页面,像关联着ListView的pager页面

最新文章

  1. apache自带ab压测
  2. 【HOW】如何配置SharePoint传入/传出电子邮件设置
  3. Linux系统简介
  4. php对uploads文件的处理问题的解决
  5. VS2008中调试dll
  6. 3.12----对potplayer的使用评价
  7. Centos环境下部署游戏服务器-软件安装
  8. java.lang.NoSuchFieldError: VERSION_2_3_0 报错解决方案
  9. 欧拉工程第60题:Prime pair sets
  10. linux 服务器更主板后无法识别网卡处理过程
  11. [C++]Store Credit——Google Code Jam Qualification Round Africa 2010
  12. ACM比赛(第二次A)
  13. Docker - 用Flannel跨主机
  14. HA机制下的Hadoop配置
  15. 『Zap Möbius反演』
  16. vim编辑器的设置
  17. Linux - 日志处理一
  18. linux popen()函数使用
  19. hdu-1043(八数码+bfs打表+康托展开)
  20. objgraph无法生成分析图的原因

热门文章

  1. [转载]【虚拟化系列】VMware vSphere 5.1 简介与安装
  2. CTF入门指南
  3. We Chall-Training: Stegano I-Writeup
  4. Express之托管静态文件
  5. 使用python制作ArcGIS插件(2)代码编写
  6. Java虚拟机中Java内存区域
  7. elasticsearch-5.2在windows下的安装方法
  8. web前端面试题及答案
  9. java 四则混合运算 计算器
  10. Noip 2014酱油记+简要题解