目录(?)[-]

  1. OptionsMenu的创建方式
  2. 如何再次创建OptionsMenu
  3. 每次访问都重新填充菜单项

OptionsMenu的创建方式

OptionMenu在第一次访问该菜单时调用,只调用一次。在以后的访问中不再调用。在《Pro Android》的书中提到,对于Android 3.0引入的平板,是在Activity创建时调用。因为菜单需要显示在屏幕上,这个没有进行试验。无论如何onCreateOptionsMenu(Menu menu),只被调用一次。

但是有时候,我们需要动态菜单,根据用户和程序的交互情况,改变菜单项。我们可以同对menuItem的visible,enable的属性进行设置,也可以通过add和remove进行修改。如果我们需要大量的修改,再次创建optionMenu则是我们所需。

如何再次创建OptionsMenu

如果运行以下代码,将使原填充的菜单项无效,当用户再次访问菜单时,再次调用onCreateOptionsMenu(Menu menu)。

invalidateOptionsMenu();

由于一个activity只有一个optionMenu对象,invalidateOptionsMenu(),并不会重新建立新的对象,还是对应原来的menu对象,只是原来所填充的菜单项都无效,也就是,我们并不需要通过menu.removeGroup()或者menu.removeItem()来删除原有的菜单项,它们都已经全部无效。

每次访问都重新填充菜单项

如果我们要每次访问都重新对菜单进行处理,使用onPrepareOptionsMenu()来替代onCreateOptionsMenu(),例如如下:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { //每次访问菜都时都会调用此函数。 
    Log.d("wei","onPrepareOptionsMenu is called, menuNum = " + menuNum);
    Log.d("wei","Menu object is " + menu.toString()); 
    menu.clear(); //上次填充的菜单项仍然有效,如果需要重新进行设置,需要对原有菜单进行清空
    createMenu(menu);  //填充菜单项的函数 
    Log.d("wei","Menu has " + menu.size() + " items");
    return super.onPrepareOptionsMenu(menu); 
}

如果我们同时写了onCreateOptionsMenu()和onPrepareOptionsMenu()的代码,用户第一次访问菜单时,先调用onCreateOptionsMenu(),然后再调用onPrepareOptionsMenu()。在之后的菜单访问中,只调用onPrepareOptionsMenu()。如果中间执行了invalidateOptionsMenu(),则下次访问菜单时,先调用onCreateOptionsMenu(),然后再调用onPrepareOptionsMenu()。

本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。

相关链接: 我的Android开发相关文章

最新文章

  1. openldap加密传输sssd
  2. ch4 MySQL 安全管理
  3. windows下如何安装jira
  4. 12Spring_AOP编程(AspectJ)_前置通知
  5. ls -alrth 及ls 详解
  6. 在asp.net mvc中使用PartialView返回部分HTML段
  7. 如何快速正确的安装 Ruby, Rails 运行环境-b
  8. C和C++运算符 (转)
  9. Servlet 的基本架构
  10. C语言之自增和自减运算符
  11. 在win7 64bit系统安装QC软件
  12. 浅谈快速开发框架的分层(WinForm)
  13. C 语言 计算
  14. Stack类常用api
  15. 官网下载的Struts 2解压后缺少xwork-core.jar文件
  16. 建立一个单链表,并删除链表中值为W的元素
  17. kafka系列六、java管理kafka Topic
  18. 写了一个hiero中添加自定义Token的脚本
  19. 设计模式《JAVA与模式》之调停者模式
  20. tomcat源码阅读之SingleThreadModel

热门文章

  1. Django APP之contenttypes简单应用
  2. mysql 5.5 安装配置方法图文教程(转发)
  3. web audio living
  4. 数据分析R语言(1)
  5. linux awk数组相关操作介绍
  6. PAT 天梯赛 L2-003. 月饼 【贪心】
  7. python中filter()函数
  8. Windows下Nginx的启动、停止等命令添加
  9. HTML URL 编码:请参阅:http://www.w3school.com.cn/tags/html_ref_urlencode.html
  10. CSS3分享功能