在Android 3.0+上使用`onPrepareOptionsMenu()`

我很好奇如何(如果有的话) onPrepareOptionsMenu(Menu) (以及扩展名, onPreparePanel(int, View, Menu) )在针对API 11或更高版本时在Android 3.0+上使用。

我的想法如下:

ActivityActionBaronCreateOptionsMenu(Menu)接收其内容,您可以在其中充气XML菜单资源,直接添加项目或两者的某种组合。 活动的任何片段也将接收此呼叫,并可选择执行相同操作。

要更新ActionBar上的项目,您可以保持Menu实例或调用invalidateOptionsMenu() ,然后再次调用onCreateOptionsMenu(Menu)

因此, onPrepareOptionsMenu(Menu)仍然只能支持那些不针对API 11或更新版本的遗留应用程序?

调用getActionBar().hide()getActionBar().show()触发对onPrepareOptionsMenu(Menu)的调用吗?

添加或删除片段会以某种方式触发此操作吗?

Solutions Collecting From Web of "在Android 3.0+上使用`onPrepareOptionsMenu()`"

从我的广泛测试来看,它奇怪地看起来与3.0版本之前的版本完全一样,只有在打开溢出菜单时才会调用。 回调未触发原始问题中列出的任何事件。

一个可能显而易见但值得注意的事实:可以在此回调中访问整个菜单,因此可以操作在操作栏,溢出菜单中显示和/或隐藏的项目。

Sice我最近遇到了类似的问题并且对这个问题很不满意,我想为以后的读者添加:是的,onPrepareOptionsMenu仍然有效。 但是,您应该只调用Honeycomb设备的标准实现(即if(android.os.Build.VERSION.SDK_INT> = 11)返回super.onPrepareOptionsMenu(menu);)并使用invalidateOptionsMenu()(如有必要,通过reflection)而onCreateOptionsMenu()代替,尤其是。 使用showAsAction时。 否则,菜单在打开之前不会更新。 例如,如果在选择项目时添加一些条目,则在菜单打开时,项目将神奇地显示在操作栏中,而不是在项目被选中时。 取消选择并隐藏菜单项也是如此。