【转】 Pro Android学习笔记(三四):Menu(5):动态菜单
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开发相关文章
【转】 Pro Android学习笔记(三四):Menu(5):动态菜单的更多相关文章
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
随机推荐
- Moore-Penrose Matrix Inverse 摩尔-彭若斯广义逆 埃尔米特矩阵 Hermitian matrix
http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html 显然,埃尔米特矩阵主对角线上的元素都是实数的,其特征值也是实数.对于只包含实数 ...
- nginx + uWSGI 为 django 提供高并发
django 的并发能力真的是令人担忧,这里就使用 nginx + uwsgi 提供高并发 nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地 ...
- [luogu3413]萌数
[luogu3413]萌数 luogu 考虑数位dp 怎么判断一个数是不是萌数? 只要知道其中某一位和它的前一位相等或者和前一位的前一位相等,那么它就是一个萌数 什么样的数不是萌数? 对于它的每一位都 ...
- 【android】在Service的onStartCommand()中调用stopself()应该注意的问题
在Service的onStartCommand()中调用stopself()后并不会立马destroy掉service,而是等onStartCommand()运行完才destroy. public c ...
- bug-5——(js)indexOf()
indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置. ①对大小写敏感 ②如果要检索的字符串值没有出现,则该方法返回-1. ③位置时从0开始的 $j(this).html().ind ...
- python+selenium多窗口之间切换
#!/usr/bin/env python # coding:utf8 # author:Z time:2018/9/19 import time from selenium import webdr ...
- vim 光标的移动和跳转文件的位置
刚启动vim进入的就是命令模式 在命令模式下 h等于左箭头 j等于下箭头 k等于上箭头 l等于右箭头 想要多次移动可以使用30j或30↓向下移动30行 在命令模式下输入0跳到行头 在命令模式下输入$跳 ...
- CodeBackUP_node_find_serial
/*************************************************************** ** Find the serial number Node ** R ...
- frontend-tools
收集整理好用的前端开发利器(Collect good front-end development tools ) 1.w3cplus前端工具 2.jsfiddle在线JS代码调试工具 3.w3cfun ...
- php线程pthread实践
php有线程吗?----有,但是需要扩展pthreads,扩展方式网上有一堆的教程,这是只做线程demo. file_put_contents(dirname(__FILE__).'/1.txt', ...