Android Actionbar Tab 导航模式
Android Actionbar Tab
下图中,红色矩形圈起来的就是我们 ActionBar Tab,下面我们将一步一步的实现下图中的效果。

初次尝试
package com.example.it.studyactionbartab;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String[] tabNames = {"收藏", "全部"};
        //使用getSupportActionBar可以有更好的兼容性
        ActionBar actionBar = this.getSupportActionBar();
        //设置当前的导航模式
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        //添加Tab
        for (String name : tabNames) {
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(name)
            );
        }
    }
}
发现问题
上面的代码看起来已经没有异样了,我们来尝试运行,你就会发现是报错了。会出现一下的信息,ActionBar Tab 必须要有一个回调。

解决问题
我们回过头来看看我们的 Tab 还有哪些方法,看来也就是下图所矩形标注的这个方法像是回调函数,那么让我们来看看此方法的的说明。
Set the ActionBar.TabListener that will handle switching to and from this tab. All tabs must have a TabListener set before being added to the ActionBar.
设置一个 ActionBar.TabListener ,他将控制Tab的开关,所有的Tab必须具有 TabListener ,设置在Tab被添加到ActionBar之前。
该方法,不出意外应该就是我们报错的原因,下面让我们来实现它。

package com.example.it.studyactionbartab;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String[] tabNames = {"收藏", "全部"};
        //使用getSupportActionBar可以有更好的兼容性
        ActionBar actionBar = this.getSupportActionBar();
        //设置当前的导航模式为TAGS模式
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        /*
        * 添加Tab
        * Note: 必须要添加一个TabListener
        * */
        for (String name : tabNames) {
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(name)
                            .setTabListener(this)
            );
        }
    }
    /*
    * 当选中TAB 时触发的事件
    * */
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    }
    /*
    * 当 Tab取消选中时触发的事件
    * */
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }
    /*
    * 当重复选中TAB时候触发的事件
    * */
    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }
}
完成功能
既然涉及到了多个界面,那么就到我们的Fragment登场了。只是一个Demo就没有复杂的功能,所以一切从简哈。
Note: 在这里 FragmentTransaction 不用提交,系统会自动的帮助我们提交,如果重复的提交就会,抛出异常。
/*
* 当选中TAB 时触发的事件
* */
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    Fragment fragment = null;
    switch (String.valueOf(tab.getText())) {
        case "收藏":
            fragment = new FragmentCollect();
            break;
        case "全部":
            fragment = new FragmentAll();
            break;
    }
    ft.replace(R.id.activity_main, fragment);
   	// ft.commit();
}

可能遇到的Error
说明 FragmentTransaction 的commit方法重复执行了,在这个回调用我们不需要,进行手动 commit() 系统会自动帮助我们commit().

源码下载
https://git.oschina.net/ShareKnowledge/android_actionbar_tab
Android Actionbar Tab 导航模式的更多相关文章
- Android 原生 Android ActionBar Tab (滑动)导航
		本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ... 
- Android ActionBar的Overlay模式如何不遮盖顶部内容的问题
		关于actionbar的overlay模式请参考 如何让android的actionbar浮动且透明 一文.这篇文章讲的是如何在这种模式下让actionbar不遮住顶部的内容. 这 一般是这样的场景, ... 
- android改动tab 导航 指示器颜色
		我事实上想改动的上面的蓝色条条,改成红色. 这个问题实在是困扰我了太长时间.之前參照google的这个文章: https://developer.android.com/training/basics ... 
- Android ActionBar
		ActionBar 在android3.0中就加入了,但是android3.0适用于平板电脑的,在手机不能使用.android 4.0之后也开始有AndroidBar.所以说要想使用androidBa ... 
- Android ActionBar的基本用法
		一 说明android 3.0后出现, 在3.0之前称为Title Bar 显示位置在标题栏上可以显示应用程序的图标和activity的标题创建方式的和系统菜单相似, 区别在于: android: ... 
- Android actionBar与Fragment结合使用Demo2
		上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的还有一种用法.达到的效果和曾经的GroupActivity或TabHost是一样的,可作为导航来使用. 实现效果图: 源码: 布局 ... 
- Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航
		一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ... 
- Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
		action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ... 
- Android入门之ActionBar实现Tab导航
		效果图: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ... 
随机推荐
- ECMAScript 6中的var,let,const
			var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ... 
- 【译】第九篇 SQL Server代理了解作业和安全
			本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ... 
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
			题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ... 
- Vim 快捷键整理【转】
			转自:http://blog.csdn.net/ceven2010/article/details/7406341 一.移动光标 1.左移h.右移l.下移j.上移k 2.向下翻页ctrl + f,向上 ... 
- select()函数用法三之poll函数
			poll是Linux中的字符设备驱动中有一个函数,Linux 2.5.44版本后被epoll取代,作用是把当前的文件指针挂到等待队列,和select实现功能差不多. poll()函数:这个函数是某些U ... 
- 比特币pow算法介绍
			Proof Of Work 工作量证明 借鉴了 哈希现金(Hashcash)-1997年 英国密码学专家亚当.贝克(Adam Back) 用工作量证明系统解决了互联网垃圾邮件问题,它要求计算机在获得发 ... 
- Nginx实现代理和用户验证
			1.下载Nginx 首先去官网http://nginx.org/en/download.html下载需要的版本即可,无需安装,只需要打开nginx.exe文件,nginx.exe的服务就开启了.打开h ... 
- wpf设置某容器透明,而不应用到容器的子元素的方法
			以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ... 
- django(1)安装及配置
			1.版本选择 Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3. Django 1.6.x 支持 Python 2.6.X, 2.7. ... 
- C++两个类相互包含引用的问题
			在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; } class B { A* a; } 请 ... 
