在ActionBar中添加下拉菜单,主要有一下几个关键步骤:

  1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项

  2. 实现ActionBar.OnNavigationListener接口,当点击ActionBar的菜单项是进行相应的操作

  3. 调用setNavigationMode()方法将ActionBar的操作模型设置为ActionBar.NAVIGATION_MODE_LIST. 注意:这个步骤应该在Activity的onCreate()回调函数时执行

  4. 调用setListNavigationCallbacks()方法为ActionBar添加适配器和监听器.

  以下是例子代码,这个例子中只是简单测试,ArrayAdapter是SpinnerAdapter的间接子类,这里ActionBar中的菜单项是一
个数组的数据,当点击菜单的其中一项,就会生成一个对应的Fragment代替原来的Fragment.Fragment里面也只有简单的一个
TextView控件,用来显示选择的信息。

  自定义的Fragment:

public class StudentInfo extends Fragment
{
// Fragment对应的标签,当Fragment依附于Activity时得到
private String tag; @Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
tag = getTag();
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
TextView textView = new TextView(getActivity());
textView.setText(tag);
return textView;
}
}

  在strings.xml中定义一个数组,这个数组就是菜单项的信息:

<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">ActionBar下拉菜单</string> <string-array name="student">
<item>邓名侨</item>
<item>刘天喜</item>
<item>其黄石</item>
<item>蔡宏远</item>
</string-array> </resources>

主要的程序片段,MainActivity:

public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 生成一个SpinnerAdapter
SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.student, android.R.layout.simple_spinner_dropdown_item);
// 得到ActionBar
ActionBar actionBar = getActionBar();
// 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
// 为ActionBar设置下拉菜单和监听器
actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());
} /**
* 实现 ActionBar.OnNavigationListener接口
*/
class DropDownListenser implements OnNavigationListener
{
// 得到和SpinnerAdapter里一致的字符数组
String[] listNames = getResources().getStringArray(R.array.student); /* 当选择下拉菜单项的时候,将Activity中的内容置换为对应的Fragment */
public boolean onNavigationItemSelected(int itemPosition, long itemId)
{
// 生成自定的Fragment
StudentInfo student = new StudentInfo();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// 将Activity中的内容替换成对应选择的Fragment
transaction.replace(R.id.context, student, listNames[itemPosition]);
transaction.commit();
return true;
}
}
}

Android ActionBar中的下拉菜单的更多相关文章

  1. Delphi访问网页中的下拉菜单

    Delphi通过TWebBrowser浏览网页,然后访问该网页中的下拉菜单: uses MsHtml;procedure TForm1.Button1Click(Sender: TObject);va ...

  2. yii框架中的下拉菜单和单选框

    yii中的下拉菜单: 第一种: <?= $form->field($model, 'parent_id')->dropDownList(ArrayHelper::map($data, ...

  3. 初学者--bootstrap(六)组件中的下拉菜单----在路上(10)

    组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 p ...

  4. bootstrap日期控件在火狐下的模态框中选择时间下拉菜单无效的解决办法

    今天收到程序组提交的一个兼容BUG,在火狐中使用模态框加载日期控件时选择时间下拉菜单没有效果(不能点击),而在谷歌中却是好的, 排错思路:1,在当前页面主层放置一个时间控件,测试通过 2,在ajax加 ...

  5. bootstrap中的下拉菜单

    下拉菜单必要的代码: <div  class="container"> <div  class="dropdown"> <butt ...

  6. 【网摘】C#.NET 在 MVC 中动态绑定下拉菜单的方法

    1. 已知下拉菜单列表项: 在 Controller 控制器类中输入已下代码  1 public class DemoController : Controller 2 { 3     public  ...

  7. Odoo8中“更多”下拉菜单选项指定后台执行代码

    在Odoo8中的仓库模块,根据每日最小安全库存数量,系统会自动生成一些补货单,而且是一个产品会生成一笔,如果产品比较多,这里生成的补货单也会很多. 如果这里的补货单没有即时处理,那相同产品后续不会再生 ...

  8. Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单

    代码: <div class='container-fluid'> <h2 class='page-header'>导航</h2> <!-- .navrbar ...

  9. PHOTOSHOP中3D下拉菜单为灰色如何设置

    方法/步骤   安装好PS后,在测试3D功能时突然发不能用.如图,怎么办呢?   按“CTRL+K”打开,或者在编辑-首选项-性能-勾选“启用OpenGL绘图(D)”   在选项对话框中勾选“启用Op ...

随机推荐

  1. c#中的结构与枚举

    结构 与c++不同的是,结构应该定义在命名空间或者类里面,成员变量叫字段,字段并且有访问控制符,每个字段前要加一个下划线 例子 using System; using System.Collectio ...

  2. Codeforces 559A 第六周 O题

    Description Gerald got a very curious hexagon for his birthday. The boy found out that all the angle ...

  3. 源码编译安装MySQL 5.7.9

    安装CentOS 6.3 配置yum:[root@hank-yoon ~]# cd /etc/yum.repos.d/ [root@hank-yoon yum.repos.d]# mkdir a [r ...

  4. C++中的struct和class的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...

  5. Java 图形编程 二:布局管理器之边界布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...

  6. 标签跳转break和continue

    标签是后面跟有冒号的标识符,例如  label1: 在java中,标签起作用的唯一的地方刚好是在迭代语句之前. “刚好之前”的意思表明,在标签和迭代之间置入热和语句都不好. 而在迭代之前设置标签的唯一 ...

  7. cocos3.2版本中的一些新特性

    1.设置屏幕分辨率的大小,需要手动添加: 2.去掉了所有CC开头的命名: 3.所有的单例(以前是采用shared开头方法),全部改为getInstance(); 4.cocos3.x以上的版本支持C+ ...

  8. 《C++Primer》复习——with C++11 [3]

    1.我们的程序经常使用很多IO库,用来输入输出例如:istream(输入流)类型,提供输入操作. ostream(输出流)类型, 提供输出操作. cin, 一个istream对象,从标准输入读取数据. ...

  9. request 路径随笔

    1. 路劲可分为 绝对路径 和 相对路径 2. 绝对路径 (开头带"/") 前端: http://localhost:8080/myWebApp/user/login.jsp /m ...

  10. python 链接hive

    http://blog.csdn.net/xubcing/article/details/8350287 http://www.centoscn.com/python/2014/0921/3801.h ...