OptionsMenu创建方式 以及invalidateOptionsMenu

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()。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值