在 Android 3.0 上使用 `onPrepareOptionsMenu()`

发布于 2024-11-08 15:47:22 字数 928 浏览 0 评论 0原文

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

我的想法如下:

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

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

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

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

添加或删除片段是否会以某种方式触发此问题?

I'm curious as to how (if at all) onPrepareOptionsMenu(Menu) (and by extension, onPreparePanel(int, View, Menu)) is used on Android 3.0+ when targeting API 11 or greater.

My thinking is as follows:

An Activity's ActionBar receives its content from onCreateOptionsMenu(Menu) where you can either inflate an XML menu resource, add items directly, or some combination of both. Any fragments of the activity will also receive this call and have the option of doing the same.

To update the items on the ActionBar you can either hold on to the Menu instance or call invalidateOptionsMenu() which will then wind up calling onCreateOptionsMenu(Menu) again.

Thus, is onPrepareOptionsMenu(Menu) then only still around to support legacy applications which do not target API 11 or newer?

Does calling getActionBar().hide() and getActionBar().show() trigger a call to onPrepareOptionsMenu(Menu) perhaps?

Does adding or removing a fragment somehow trigger this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回忆追雨的时光 2024-11-15 15:47:22

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

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

From my extensive testing, it strangely appears to work exactly like on pre-3.0 versions of the platform, only being invoked when the overflow menu is opened. The callback did not fire on either of the events listed in the original question.

A perhaps obvious but noteworthy fact: The entire menu is accessible on this callback so manipulation of items which are visible on the action bar, in the overflow menu, and/or hidden is possible.

凤舞天涯 2024-11-15 15:47:22

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

Sice I recently had similar questions and stumpled upon this one, I'd like to add for later readers:
Yes, onPrepareOptionsMenu still does work.
However, you should just invoke the standard implementation for Honeycomb devices (i.e. if ( android.os.Build.VERSION.SDK_INT >= 11 ) return super.onPrepareOptionsMenu(menu);) and use invalidateOptionsMenu() (via reflection, if necessary) and onCreateOptionsMenu() instead, esp. when using showAsAction. Otherwise, the menu won't be updated until it's opened. For example, if you add some entries when an item is selected, the items will magically appear in the action bar when the menu's opened, not when the item's becoming selected. Same goes for deselection and hiding the menu items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文