如何只触发 onPrepareOptionsMenu 而不触发 onCreateOptionsMenu?
How do I only trigger onPrepareOptionsMenu and not onCreateOptionsMenu?
根据 Android menu documentation and a similar question,onPrepareOptionsMenu
应该用于动态更新菜单。对于 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
根据 Android menu documentation and a similar question,onPrepareOptionsMenu
应该用于动态更新菜单。对于 Android 3.0 及更高版本,文档说:
When an event occurs and you want to perform a menu update, you must call
invalidateOptionsMenu()
to request that the system callonPrepareOptionsMenu()
但是,当调用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