21

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

我的想法如下:

一个Activity'sActionBar接收它的内容onCreateOptionsMenu(Menu),您可以在其中扩充 XML 菜单资源、直接添加项目或两者的某种组合。活动的任何片段也将收到此调用并可以选择执行相同操作。

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

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

呼叫getActionBar().hide()getActionBar().show()触发呼叫onPrepareOptionsMenu(Menu)可能吗?

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

4

2 回答 2

10

根据我的大量测试,奇怪的是,它的工作方式与平台 3.0 之前的版本完全一样,只是在打开溢出菜单时才被调用。原始问题中列出的任何一个事件都没有触发回调。

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

于 2011-05-25T19:16:34.707 回答
4

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

于 2011-08-12T10:50:36.530 回答