我很好奇在定位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()
的调用?
添加或删除片段会以某种方式触发吗?
答案 0 :(得分:10)
从我的广泛测试中,它奇怪地看起来与3.0版本之前的版本完全一样,只有在打开溢出菜单时才会调用。回调没有触发原始问题中列出的任何一个事件。
一个可能显而易见但值得注意的事实:可以在此回调中访问整个菜单,因此可以操作在操作栏,溢出菜单中显示和/或隐藏的项目。
答案 1 :(得分:4)
Sice我最近遇到了类似的问题并且对此问题很难解释,我想为以后的读者添加: 是的,onPrepareOptionsMenu仍然有效。 但是,您应该只调用Honeycomb设备的标准实现(即if(android.os.Build.VERSION.SDK_INT> = 11)返回super.onPrepareOptionsMenu(menu);)并使用invalidateOptionsMenu()(如有必要,通过反射) )和onCreateOptionsMenu()而不是esp。使用showAsAction时。否则,菜单在打开之前不会更新。例如,如果在选择项目时添加一些条目,则在菜单打开时,项目将神奇地显示在操作栏中,而不是在项目被选中时。取消选择并隐藏菜单项也是如此。