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

我很好奇如何在Android 3.0+上使用onPrepareOptionsMenu(Menu) (以及扩展名, onPreparePanel(int, View, Menu) )如何定位API 11或更高版本。

我的想法如下:

一个ActivityActionBaronCreateOptionsMenu(Menu)接收它的内容,在这里你可以膨胀一个XML菜单资源,直接添加项目,或者两者的组合。 活动的任何片段也将接收此调用,并可以select执行相同的操作。

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

因此,是onPrepareOptionsMenu(Menu)然后只支持遗留的应用程序不针对API 11或更新?

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

添加或删除片段以某种方式触发这个?

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

从我的广泛的testing中,奇怪的是,它看起来和平台3.0以前的版本完全一样,只有在打开溢出菜单时才会调用它。 这个callback没有触发原来问题中列出的任何事件。

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

SICE我最近也有类似的问题,并且对这个问题有所st I,我想补充给以后的读者:是的,onPrepareOptionsMenu仍然有效。 然而,你应该只是调用标准实现的蜂窝设备(即如果(android.os.Build.VERSION.SDK_INT> = 11)返回super.onPrepareOptionsMenu(菜单);)和使用invalidateOptionsMenu()(通过reflection,如有必要)和onCreateOptionsMenu(),而不是。 当使用showAsAction。 否则,菜单在打开之前不会更新。 例如,如果您在select某个项目时添加了一些条目,那么这些项目将在菜单打开时奇迹般地显示在操作栏中,而不是在项目被选中时显示。 同样取消select和隐藏菜单项。