运行时更改菜单

在android 2.3.3中,如何在运行时更改选项菜单? 我有两个XML菜单,需要在运行时切换菜单types。

我想销毁或更新菜单,然后当用户按下菜单button时,再次调用onCreateOptions菜单select适当的xml菜单。

@Override public boolean onCreateOptionsMenu(Menu menu) { if(OPTIONS_TYPE == 0) // Photo option getMenuInflater().inflate(R.menu.photomenu, menu); else // Photo + delete option getMenuInflater().inflate(R.menu.photodeletemenu, menu); return super.onCreateOptionsMenu(menu); } 

Solutions Collecting From Web of "运行时更改菜单"

onCreateOptionsMenu只被调用一次。 有可能是一个黑客,可以让你删除一个选项菜单,但调用后的标准方式是从android文档如下,请注意,它说“必须”

在运行时更改菜单项

一旦活动被创build,onCreateOptionsMenu()方法只被调用一次,如上所述。 系统保留并重新使用您在此方法中定义的菜单,直到您的活动被破坏。 如果您想要在首次创build后更改选项菜单,则必须重写onPrepareOptionsMenu()方法。

文档在创build菜单

现在说,你可以做到这一点,只是不知道是否支持。 这是我自己的testing代码,每次交换菜单时,都需要添加自己的逻辑

 @Override public boolean onPrepareOptionsMenu (Menu menu) { menu.clear(); if (OPTIONS_TYPE == 0) { OPTIONS_TYPE = 1; getMenuInflater().inflate(R.menu.secondmenu, menu); } else { // Photo + delete option { OPTIONS_TYPE = 0; getMenuInflater().inflate(R.menu.firstmenu, menu); } return super.onPrepareOptionsMenu(menu); }