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页面
Android两种为ViewPager+Fragment添加Tab的方式的更多相关文章
- Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)
在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: ...
- Android 两步搞定Fragment的返回键
Fragment可以说是在Android开发必需要使用到技术,项目中的界面基本上都是使用Fragment来实现,而Activity只是作为Fragment的载体,但有些特殊情况下Fragment也不得 ...
- Android 两种方式实现类似水波扩散效果
原文链接 https://mp.weixin.qq.com/s/M19tp_ShOO6esKdozi7Nlg 两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 ...
- Android 两种注册、发送广播的区别
前言:前面文章记录了Service的使用,这次来记录另一个四个组件之一的BroadcastReceiver.主要介绍两种发送和注册广播的区别. BroadcastReceiver广播接收者用于接收系统 ...
- android 两种定时器的实现
在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了. 实验1:使用Java.util.Timer. 在onStart()创创建Time ...
- android控制文件:ViewPager+Fragment+GridView使用(与AndroidQuery框架结合)
最近我看到一个AndroidQuery该框架.里面Demo,有一个屏幕,让博主喜欢.很顺利的左右滑动,感觉非常好,所以拿来和大家分享一下.看看结果图.: 从图中能够看出.上面的布局是一个Layout里 ...
- WPF 下两种图片合成或加水印的方式(转载)
来源:http://www.cnblogs.com/lxblog/ 最近项目中应用多次应用了图片合成,为了今后方便特此记下. 在WPF下有两种图片合成的方式,一种还是用原来C#提供的GDI+方式,命名 ...
- 两种js监听滚轮事件的方式
前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...
- 两种最常用的Sticky footer布局方式
Sticky footer布局是什么? 我们所见到的大部分网站页面,都会把一个页面分为头部区块.内容区块和页脚区块,当头部区块和内容区块内容较少时,页脚能固定在屏幕的底部,而非随着文档流排布.当页面内 ...
随机推荐
- 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)
在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...
- 列存储段消除(ColumnStore Segment Elimination)
列存储索引是好的!对于数据仓库和报表工作量,它们是真正的性能加速器.与聚集列存储结合,你会在常规行存储索引(聚集索引,非聚集索引)上获得巨大的压缩好处.而且创建聚集列存储索引非常简单: CREATE ...
- 腾讯优图及知脸(ZKface)人脸比对接口测试(python)
一.腾讯优图 1.开发者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID.S ...
- Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services
本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...
- EM and GMM(Code)
In EM and GMM(Theory), I have introduced the theory of em algorithm for gmm. Now lets practice it in ...
- STL中sort排序算法第三个参数_Compare的实现本质
关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重 ...
- iOS上传代码到Github平台
对于开发人员来说,很多时候想把自己好的代码 demo放到一个公共平台,与大家交流,Github就是一个不错的平台,下面给大家说说Github的具体使用方法. 第一步.申请Github账号.https: ...
- c++STL排序算法注意事项
关于算法中的比较函数 #include<iostream> #include<algorithm> using namespace std; int compare(doubl ...
- web性能优化 来自《web全栈工程师的自我修养》
最近在看<web全栈工程师的自我修养>一书,作者是来自腾讯的前端工程师.作者在做招聘前端的时候问应聘者web新能优化有什么了解和经验,应聘者思索后回答“在发布项目之前压缩css和 Java ...
- 程序点滴001_Python模拟点阵数字
尝试过很多编程语言,写过不少程序(当然,基本上都是些自娱自乐或给自己用的工具类的小玩意儿),逐渐认识到编写程序是一个不断完善.不断优化的过程——编程首先要有一个想法(目标),围绕这个目标形成最基本的功 ...