ActionBar除可提供Tab导航支持之外,还提供了下拉式(DropDown)导航方式。下拉式导航的ActionBar在顶端生成下拉列表框,当用户单击某个列表项时,系统根据用户单击事件导航指定Fragment。

为了使用ActionBar实现Tab导航,按如下步骤进行即可。

  • 调用ActionBar的actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法设置使用下拉列表的导航方式。
  • 调用ActionBar的setListNavigationCallbacks(SpinnerAdapter adapter,ActionBar.OnNavigationListenter callback)()添加多个列表项,并为每个列表项设置事件监听器。其中第一个参数Adapter负责提供多个列表项,第二个参数为事件监听器。

   实例:ActionBar结合Fragment实现下拉式导航

下面的实例的布局文件与前面介绍的Tab导航实例的布局文件完全相同。

该布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</LinearLayout>

该Activity的Java代码如下:

package org.crazyit.helloworld;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.widget.ArrayAdapter; public class ActionBar_DropDownNav extends Activity implements OnNavigationListener {
private static final String SELECTED_ITEM="selected_item";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.action_bar__drop_down_nav);
final ActionBar actionBar=getActionBar();
//设置ActionBar是否显示标题
actionBar.setDisplayShowTitleEnabled(true);
//设置导航模式,使用List导航
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
//为actionBar安装ArrayAdapter
actionBar.setListNavigationCallbacks(new ArrayAdapter<String>(ActionBar_DropDownNav.this,android.R.layout.simple_list_item_1
,android.R.id.text1,new String[]{"第一页","第二页","第三页"}), this
);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.action_bar__drop_down_nav, menu);
return true;
} @Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
//super.onSaveInstanceState(outState);
//将当前选中的Fragmnet页的索引保存到Bundle中
outState.putInt(SELECTED_ITEM, getActionBar().getSelectedNavigationIndex());
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
//super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState.containsKey(SELECTED_ITEM))
{
//选中前面保存的索引对应的Fragment页
getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(SELECTED_ITEM)); }
}
//当导航项被选中时激发该方法
@Override
public boolean onNavigationItemSelected(int position, long itemId) {
//创建一个新的Fragment对象
Fragment fragment=new DummyFragment();
//创建一个Bundle对象,用于向Fragment传入参数
Bundle args=new Bundle();
args.putInt(DummyFragment.ARG_SECTION_NUMBER,position+1);
//向fragment传入参数
fragment.setArguments(args);
//获取FragmentTransaction对象
FragmentTransaction ft=getFragmentManager().beginTransaction();
//使用fragment代替该Activity中的container组件
ft.replace(R.id.container, fragment);
//提交事务
ft.commit();
// TODO Auto-generated method stub
return true;
} }

上面程序中第一段粗体字代码就是为ActionBar启用下拉导航支持的关键代码,这段代码做了上面介绍的两件事情:先调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)启用下拉列表导航支持;然后为ActionBar传入ArrayAdapter(当然也可以使用SimpleAdapter或扩展BaseAdapter的对象)和监听器即可。

当用户选中指定的导航项时,将会激发该监听器的onNavigationItemSelected(),该方法的处理逻辑与前面Tab导航实例中的onTabSelected()处理方法的处理逻辑完全相同,该实例所使用的DummyFragment与前面的Fragment类的代码页完全相同。

运行该代码将出现以下界面效果。

使用ActionBar实现下拉式导航的更多相关文章

  1. javascript笔记09:javascript的下拉式导航菜单

    <!DOCTYPE html> <html> <body> <script> function hideAll() { for(i=0;i<odi ...

  2. AndroidUI组件之ActionBar--基于下拉的导航方式

      在上一篇关于ActionBar的博文中.我们知道了ActionBar是Android3.0的重要更新之中的一个.本篇博文就来写一个开发中经经常使用到的样例.用ActionBar提供基于下拉的导航方 ...

  3. Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换

    前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...

  4. 下拉式菜单中的内容堆叠(ul型)

    今天使用ul创建下拉式菜单,菜单中的内容堆在了一起. 这是我的html代码 <!DOCTYPE html> <html lang="en"> <hea ...

  5. (转载)一个用于Gnome桌面的下拉式终端: Guake 0.7.0 发布

    转自:https://linux.cn/article-5507-1.html Linux的命令行是最好.最强大的东西,它使新手着迷,并为老手和极客的提供极其强大的功能.那些在服务器和生产环境下工作的 ...

  6. 一款jquery编写图文下拉二级导航菜单特效

    一款jquery编写图文下拉二级导航菜单特效,效果非常简洁大气,很不错的一款jquery导航菜单特效. 这款jquery特效适用于很多的个人和门户网站. 适用浏览器:IE8.360.FireFox.C ...

  7. 为下拉式菜单(DropDownList)添加第一个选项

    很多方法可以为为下拉式菜单(DropDownList)添加第一个选项,下面是Insus.NET小结了几个方法,仅供参考: Html code: <body>    <form id= ...

  8. PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框

    零.引言 PropertyGrid中我们经常看到一些下拉式的编辑方式(Color属性)和弹出式编辑框(字体),这些都是为一些复杂的属性提供的编辑方式,本文主要说明如何实现这样的编辑方式. 一.为属性提 ...

  9. 令人眼前一亮的下拉式终端 Tilda & Guake

    前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...

随机推荐

  1. 第2课 Linux操作系统简介

    1. Linux操作系统的构成 (1)内核(kernel) ①操作系统的核心,负责管理系统的进程.内存.设备驱动程序.文件和网络系统. ②控制系统和硬件之间的相互通信. ③决定着系统的性能和稳定性. ...

  2. POJ3352 Road Construction 双连通分量+缩点

    Road Construction Description It's almost summer time, and that means that it's almost summer constr ...

  3. mssql数据库syscolumns表中xtype列

    xtype    类型34 image35 text36 uniqueidentifier48 tinyint52 smallint56 int58 smalldatetime59 real60 mo ...

  4. COCOS2DX遇到的问题

    1 新增类无法在别的类里面include到的问题: 去项目-> 配置属性-> C/C++-> 常规-> 附加包含目录中增加类的文件夹路径 2 新增类出现 extensions\ ...

  5. linux下文件和目录的颜色表示

    蓝色表示目录: 绿色表示可执行文件: 红色表示压缩文件: 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了: 黄色是设备文件,包括block, char, fifo. (摘自: ...

  6. iOS中正则表达式的三种使用方式

    1.利用NSPredicate(谓词)匹配 例如匹配有效邮箱: NSString *email = @“nijino_saki@163.com”: NSString *regex = @"[ ...

  7. 入门经典——基础数据结构专题(List)

    UVA127 链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  8. mysql的 charset、collation、prefix了解

    charset,即字符集. collation,用于指定数据集如何排序,以及字符串的比对规则,即排序规则. prefix,即数据库里表使用的前缀. /************************* ...

  9. FZU 2112 Tickets

    这个问题可以转变一下,先要知道有几个连通块,连通块之间肯定需要添加一条边, 还需要知道每个连通块内部需要添加几条边,这个问题等价于求一张图至少需要几笔画成,这个问题的答案是度为奇数的点的个数/2 #i ...

  10. iOS开发——沙箱

    iphone沙箱模型的有三个文件夹,documents,tmp,Library.有时开发时要求我们保存一些数据在本地,这就用到了. 1.Documents 目录:您应该将所有de应用程序数据文件写入到 ...