使用ViewPager与ActionBar.Tab

前言:


上面动图中滑动切换页面就是用到 VIewPager,也可以当作演示幻灯片,制作使用引导。而最上面的标签就是用到 ActionBar 的 Tab,与 ViewPager 关联后可以点击切换页面,最下面的控件是 PagerTitleStrip,用来显示当前页面所在的标签名。
由于Google官方建议用 Toolbar 代替 Actionbar,Toolbar也确实比 ActionBar好用,所以ActionBar 的Tab就不好用了,取而代之的是 support design 里的 TabLayout,怎么用呢,看我这个帖子:TabLayout ViewPager快速实现滑动切换页面及对应标签

学习使用 ViewPager:


首先直接在主布局中写入:

ViewPager布局好了,那接下来怎么用呢, ViewPager 划动的页面其实是一个个的 Fragment ,所以 ViewPager 需要和 Fragment 建立关联,那谁来处理 ViewPager 和 Fragment 的关联呢,使用 PagerAdapter ,最后调用 ViewPager 的 setAdapter()方法 ,设置关联。

官方提供了两个 PagerAdapter :

  • FragmentPagerAdapter:适合切换的pages较少的
  • FragmentStatePagerAdapter:适合未知pages多少,用户切换到其他 pages 时,会destroy对应的Fragment减少内存占用

这里我们因为只显示几个,选择继承 FragmentPagerAdapter,在实现适配器之前我们先把 Fragment 写好:

我们使用同一个 Fragment,但是new Fragment 时通过 Bundle 来设置每一个 Fragment 的TextView显示当前是第几个 Fragment,接下来实现我们的 FragmentPagerAdapter,新建 MyFragmentAdapter 继承 FragmentPagerAdapter,并且实现其中几个重要方法:


适配器通过 getCount 返回的数来确定调用 getItem() 的次数,这里返回 3 (这里写死了,实际可以灵活控制),代表新建三个 Fragment,ViewPager的 pages 也就是三个,getPageTitle()方法也是重要的一个方法,在后面讲到的 PagerTitleStrip 就是使用这个函数来确定 tab 的文本。 实现了 MyFragmentAdapter 后我们就可以开始建立关联了。

回到 Activity 的 onCreate() 方法:

  • 获取 ViewPager 的 id。
  • 实例化我们的 MyFragmentAdapter ,getSupportFragmentManager()传入FragmentManager。
  • viewPager 设置适配器为我们的 MyFragmentAdapter

到这 ViewPager 的基本用法就学完了,效果如下:

ActionBar.Tab 与 ViewPager关联:


  • ActionBar actionBar = getSupportActionBar();获取 ActionBar对象
  • actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 设置渲染 Tabs
  • 通过 actionBar.newTab() .setIcon().setText() 方法获取 tab实例,然后 actionBar.addTab(tab) 把 tab 加入 ActionBar,addTab几个,就加入几个标签。

思路就是这样,然而这样的 Tab 点击并没有反映,因为我们还没实现Tab的点击事件,通过 ActionBar.TabListener 实现点击事件,代码如下:

  • 在 onTabSelected() 事件中,点击第几个 Tab 我们就通过 viewPager.setCurrentItem(tab.getPosition()) 方法切换到第几个 Item(Fragment)。
  • 在 for 循环中以 我们的 MyFragmentAdapter 适配器里的 getCount() 方法返回的数来确定 add 入几个 Tab,且在 ActionBar.newTab 方法中设置监听器。

到这里我们的 Tab 就可以显示且点击切换页面了,效果如下:

但是问题又来了,滑动 ViewPager 可以切换 Item,但是上面的 Tab 却不会自动跳转到相应的 Tab标签下,这里是需要监听 ViewPager 切换页面的动作,通过 ViewPager.OnPageChangeListener(),代码如下:

  • 在 onPageSelected() 方法中设置 Item 所对应的 ActionBar.Tab,参数 position 对于 ActionBar.Tab 和 我们 ViewPager 的 Item 都是一一对应的,因为 Tab , Item 都为三个。

到这里我们ActionBar Tab 和 ViewPager的关联就完成了,最后再讲一个 PagerTitleStrip

PagerTitleStrip 的简单使用:


使用 PagerTitleStrip 非常简单,直接在 ViewPager 的布局中加入:

  • android:layout_gravity="bottom" 设置显示在底部

效果图:

通过设置在 ViewPager 布局中,就完成 PagerTitleStrip 和 ViewPager 的绑定,会发现 PagerTitleStrip 自动显示标签名,这是回调了我们 MyFragmentAdapter 重写的 getPageTitle(int position) 方法来获取相应的标签名。

到这里就结束了,如果对你有帮助请点击 喜欢 哦,也欢迎到我 GitHub 点 star

Demo地址:


GitHub地址:https://github.com/RunHuaOil/AndroidPractice/tree/master/ViewPagerTest

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容