Android两种为ViewPager+Fragment添加Tab的方式
在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页面
最新文章
- apache自带ab压测
- 【HOW】如何配置SharePoint传入/传出电子邮件设置
- Linux系统简介
- php对uploads文件的处理问题的解决
- VS2008中调试dll
- 3.12----对potplayer的使用评价
- Centos环境下部署游戏服务器-软件安装
- java.lang.NoSuchFieldError: VERSION_2_3_0 报错解决方案
- 欧拉工程第60题:Prime pair sets
- linux 服务器更主板后无法识别网卡处理过程
- [C++]Store Credit——Google Code Jam Qualification Round Africa 2010
- ACM比赛(第二次A)
- Docker - 用Flannel跨主机
- HA机制下的Hadoop配置
- 『Zap Möbius反演』
- vim编辑器的设置
- Linux - 日志处理一
- linux popen()函数使用
- hdu-1043(八数码+bfs打表+康托展开)
- objgraph无法生成分析图的原因