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 导航模式的更多相关文章

  1. Android 原生 Android ActionBar Tab (滑动)导航

    本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...

  2. Android ActionBar的Overlay模式如何不遮盖顶部内容的问题

    关于actionbar的overlay模式请参考 如何让android的actionbar浮动且透明 一文.这篇文章讲的是如何在这种模式下让actionbar不遮住顶部的内容. 这 一般是这样的场景, ...

  3. android改动tab 导航 指示器颜色

    我事实上想改动的上面的蓝色条条,改成红色. 这个问题实在是困扰我了太长时间.之前參照google的这个文章: https://developer.android.com/training/basics ...

  4. Android ActionBar

    ActionBar 在android3.0中就加入了,但是android3.0适用于平板电脑的,在手机不能使用.android 4.0之后也开始有AndroidBar.所以说要想使用androidBa ...

  5. Android ActionBar的基本用法

    一  说明android 3.0后出现, 在3.0之前称为Title Bar  显示位置在标题栏上可以显示应用程序的图标和activity的标题创建方式的和系统菜单相似, 区别在于: android: ...

  6. Android actionBar与Fragment结合使用Demo2

    上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的还有一种用法.达到的效果和曾经的GroupActivity或TabHost是一样的,可作为导航来使用. 实现效果图: 源码: 布局 ...

  7. Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

    一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ...

  8. Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  9. Android入门之ActionBar实现Tab导航

    效果图: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ...

随机推荐

  1. 【Foreign】Rectangle [KD-tree]

    Rectangle Time Limit: 50 Sec  Memory Limit: 512 MB Description Input Output Sample Input 0 4 2 0 2 1 ...

  2. 20145209 2016-2017-2 《Java程序设计》第7周学习总结

    20145209 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 read()每次读入一个字节. eg:short2个字节,2=0x0201,读入后要0x & ...

  3. base64 与字符串互转

    #region 将Base64编码的文本转换成普通文本 /// <summary> /// 将Base64编码的文本转换成普通文本 /// </summary> /// < ...

  4. apache服务器yii2报The fileinfo PHP extension is not installed解决思路

    这个问题整整困扰了我两天,今天终于搞定了.记录一下. 背景是这样的,我呢,在centos服务器上安装了lamp环境,其中php是5.3.3,在用composer安装yii2的时候,出现了某些yii2插 ...

  5. weblogica domain目录 环境变量 如何启动weblogic server

    手工启动weblogic server

  6. 从Python到Web开发

    基础部分: 1-编程基础及Python环境部署 2-Python基础语法-内存管理-运算符-程序控制 3-Python内置结构-列表 4-Python数据类型之元组-字符串 5-python的封装与结 ...

  7. 用C代码简要模拟实现一下RPC(远程过程调用)并谈谈它在代码调测中的重要应用【转】

    转自:http://blog.csdn.net/stpeace/article/details/44947925 版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则 ...

  8. git —— 异常1,index.lock

    git提交过程中出现的问题 解决方法:找到 index.lock文件将其删除 一般 index.lock 在.git下面, 有时 .git 是隐藏的,但是无论怎样, 可以通过 everything 找 ...

  9. 使用JS实现文字搬运工

    使用JS实现文字搬运工 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html><head><meta http-equiv=&quo ...

  10. Java Http接口加签、验签操作方法

    1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确 ...