【转】 Pro Android学习笔记(三四):Menu(5):动态菜单
2015-12-15 13:23
477 查看
目录(?)[-]
OptionsMenu的创建方式
如何再次创建OptionsMenu
每次访问都重新填充菜单项
但是有时候,我们需要动态菜单,根据用户和程序的交互情况,改变菜单项。我们可以同对menuItem的visible,enable的属性进行设置,也可以通过add和remove进行修改。如果我们需要大量的修改,再次创建optionMenu则是我们所需。
invalidateOptionsMenu();
由于一个activity只有一个optionMenu对象,invalidateOptionsMenu(),并不会重新建立新的对象,还是对应原来的menu对象,只是原来所填充的菜单项都无效,也就是,我们并不需要通过menu.removeGroup()或者menu.removeItem()来删除原有的菜单项,它们都已经全部无效。
@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开发相关文章
OptionsMenu的创建方式
如何再次创建OptionsMenu
每次访问都重新填充菜单项
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(4):Alternative菜单
- 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单
- 【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单
- Android -- 自定义权限
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
- Android(四) Activity布局初步(一)
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
- 【转】 Pro Android学习笔记(二八):用户界面和控制(16):GridLayout
- 【转】 Pro Android学习笔记(二七):用户界面和控制(15):FrameLayout
- 【转】Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
- 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme
- 【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- Android开发艺术2之Activity的启动模式
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
- 【转】 Pro Android学习笔记(二一):用户界面和控制(9):Gallery和SimpleAdapter
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
- 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView