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

时间:2011-05-21 06:37:26

标签: android android-fragments android-3.0-honeycomb

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

我的想法如下:

Activity的{​​{1}}从ActionBar接收其内容,您可以在其中充气XML菜单资源,直接添加项目或两者的某种组合。活动的任何片段也将接收此呼叫,并可选择执行此操作。

要更新ActionBar中的项目,您可以抓住onCreateOptionsMenu(Menu)实例或致电invalidateOptionsMenu(),然后再次拨打Menu

因此,onCreateOptionsMenu(Menu)是否只能支持那些不针对API 11或更新版本的旧应用程序?

调用onPrepareOptionsMenu(Menu)getActionBar().hide()是否会触发对getActionBar().show()的调用?

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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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