本节主要讲解ActionBar如何添加Tabs标签和下拉导航。

一、添加标签 Tabs

在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重写onTabSelected、onTabUnselected和onTabReselected方法来关联Fragment。代码如下:

Java代码
  1. private class MyTabListener implements ActionBar.TabListener {
  2. private TabContentFragment mFragment;
  3. public TabListener(TabContentFragment fragment) {
  4. mFragment = fragment;
  5. }  @Override
  6. public void onTabSelected(Tab tab, FragmentTransaction ft) {
  7. ft.add(R.id.fragment_content, mFragment, null);
  8. }
  9. @Override
  10. public void onTabUnselected(Tab tab, FragmentTransaction ft) {
  11. ft.remove(mFragment);
  12. }
  13. @Override
  14. public void onTabReselected(Tab tab, FragmentTransaction ft) {
  15. }
  16. }

接下来我们创建ActionBar在Activity中,代码如下:

Java代码
  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. final ActionBar actionBar = getActionBar(); //提示getActionBar方法一定在setContentView后面
  6. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
  7. actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
  8. Fragment artistsFragment = new ArtistsFragment();
  9. actionBar.addTab(actionBar.newTab().setText(R.string.tab_artists).setTabListener(new TabListener(artistsFragment)));
  10. Fragment albumsFragment = new AlbumsFragment();
  11. actionBar.addTab(actionBar.newTab().setText(R.string.tab_albums).setTabListener(new TabListener(albumsFragment)));
  12. }

二、添加下拉导航 Drop-down Navigation

创建一个SpinnerAdapter提供下拉选项,和Tab方式不同的是Drop-down只需要修改下setNavigationMode的模式,将ActionBar.NAVIGATION_MODE_TABS改为ActionBar.NAVIGATION_MODE_LIST,最终改进后的代码为:

Java代码
  1. ActionBar actionBar = getActionBar();
  2. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
  3. actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

上面我们通过setListNavigationCallbacks方法绑定一个SpinnerAdapter控件,具体的OnNavigationListener代码示例为:

Java代码
  1. mOnNavigationListener = new OnNavigationListener() {
  2. String[] strings = getResources().getStringArray(R.array.action_list);
  3. @Override
  4. public boolean onNavigationItemSelected(int position, long itemId) {
  5. ListContentFragment newFragment = new ListContentFragment();
  6. FragmentTransaction ft = openFragmentTransaction();
  7. ft.replace(R.id.fragment_container, newFragment, strings[position]);
  8. ft.commit();
  9. return true;
  10. }
  11. };

而其中的ListContentFragment的代码为:

Java代码
  1. public class ListContentFragment extends Fragment {
  2. private String mText;
  3. @Override
  4. public void onAttach(Activity activity) {
  5. super.onAttach(activity);
  6. mText = getTag();
  7. }
  8. @Override
  9. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  10. Bundle savedInstanceState) {
  11. TextView text = new TextView(getActivity());
  12. text.setText(mText);
  13. return text;
  14. }
  15. }

详解Android ActionBar之二:ActionBar添加Tabs标签和下拉导航的更多相关文章

  1. Android ActionBar详解(二):ActionBar实现Tabs标签以及下拉导航

    一.添加标签 Tabs   在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重写onTabSelected.onTabUnselected ...

  2. 详解Android首选项框架ListPreference

    详解Android首选项框架ListPreference 原文地址 探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写 ...

  3. 详解Android Activity---启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  4. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  5. 详解Android Activity启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  6. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  7. 详解android:scaleType属性

    详解android:scaleType属性 转自:http://blog.csdn.net/encienqi/article/details/7913262    http://juliaailse. ...

  8. adb shell 命令详解,android

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  9. Android Binder IPC详解-Android学习之旅(96)

    linux内存空间与BInder Driver Android进程和linux进程一样,他们只运行在进程固有的虚拟空间中.一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间 ,用户空间是 ...

随机推荐

  1. MYI 文件内容

    参考 http://blog.itpub.net/703656/viewspace-1018470/ 创建表结构 create table test(name char(20), age int, c ...

  2. PHP如何大幅度提升运行效率? -- 把它编译成机器码!

      书接上回   今天讨论如何大幅度提升PHP的运行效率. 在这,我们不纠结神马单双引号.全局变量.OO.require_once.错误抑制.... 在这,我们也不讨论APC.opcache.XCac ...

  3. QTP、LoadRunner、QC工具下载地址

    QTP10.0工具下载地址:http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=380454070&itemid ...

  4. Zabbix探索:网络设备监控3

    这两天主要是建立Cisco和H3C的网络设备监控模板.在建立的过程中就能明显感受到两家企业的深层次的东西. Cisco设备的CPU等信息都很好找,而且有官方的SNMP Object Navigator ...

  5. varchar

    mysql varchar(50) 不管中文 还是英文 都是存50个的 MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串.M 表示最大列长度.M的范围是0到6 ...

  6. leetcode@ [30/76] Substring with Concatenation of All Words & Minimum Window Substring (Hashtable, Two Pointers)

    https://leetcode.com/problems/substring-with-concatenation-of-all-words/ You are given a string, s, ...

  7. POJ 2749--Building roads(2-SAT)

    题意:John有n个牛棚,每个牛棚都住着一些牛,这些牛喜欢串门(drop around, 学到了...),所以John想要建几条路把他们连接起来.他选择的方法是建两个相连中转站,然后每个牛棚连接其中一 ...

  8. 关于 Java Collections API 您不知道的 5 件事,第 1 部分

    定制和扩展 Java Collections Java™ Collections API 远不止是数组的替代品,虽然一开始这样用也不错.Ted Neward 提供了关于用 Collections 做更 ...

  9. php self

    self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量. 假如我们使用类里面静态(一般用关键字static)的成员,我们也必须使用self来调用. 还要 ...

  10. [Objective-c 基础 - 1.1] OC类

    Obj-C中没有包得概念,使用前缀进行区分 自带类用NS开头命名 关键字使用@开头   A. 第一个OC程序 1. 导入Foundation框架的主头文件 #import <Foundation ...