如何只触发 onPrepareOptionsMenu 而不触发 onCreateOptionsMenu?

How do I only trigger onPrepareOptionsMenu and not onCreateOptionsMenu?

根据 Android menu documentation and a similar questiononPrepareOptionsMenu 应该用于动态更新菜单。对于 Android 3.0 及更高版本,文档说:

When an event occurs and you want to perform a menu update, you must call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu()

但是,当调用invalidateOptionsMenu()时,系统会同时调用onCreateOptionsMenu()onPrepareOptionsMenu()。恢复 activity 也会调用两种方法(如果它在后台停止)或 none.

对我来说,这听起来像是两种方法之间的区别已经过时了。是否存在Android只调用onPrepareOptionsMenu()而不调用onCreateOptionsMenu()的情况?此外,是否有一种方法可以手动请求 Android 仅调用 onPrepareOptionsMenu(),就像 documentation(在下面引用)中暗示的那样?

[onCreateOptionsMenu()] is only called once, the first time the options menu is displayed. To update the menu every time it is displayed, see onPrepareOptionsMenu(Menu).

非常感谢!

您在这里使用的是 Activity 菜单,因此假设您只有一个 activity 应用程序,它只会在 onCreateOptionsMenu 期间膨胀一次 - 这就是单次调用的情况。
如果你想改变它,那么你必须使当前的无效并膨胀一个新的 - 因为它是一个应用程序的全局菜单,它只有在你想改变它的内容时才有意义 - 你使用 onPrepareOptionsMenu 然后在 onCreateOptionsMenu 调用中再次对其充气。

但是,如果您对菜单进行了大量更改,那么最好使用 Fragment 特定菜单 - 它们的寿命与它们的 fragment 一样长 - menus

所以要回答您的具体问题 - 您不能不触发 onCreateOptionsMenu。你可以重写它什么也不做,但菜单不会膨胀

编辑 - 看来我也误解了文档。 onPrepareOptionsMenu 的关键位是:

This is called right before the menu is shown, every time it is shown.

这实际上意味着每次单击菜单 onPrepareOptionsMenu 都会被调用,而不会调用 onCreateOptionsMenu