Android onCreateOptionsMenu(菜单菜单菜单)在活动的生命周期中仅调用一次

Android onCreateOptionsMenu(菜单菜单菜单)在活动的生命周期中仅调用一次,android,Android,我注意到 @Override public boolean onCreateOptionsMenu(Menu menu) { 只会接到一次电话。我需要在每次显示菜单时调用它,因为我根据应用程序状态从菜单中添加/删除项目 这可能吗?是的。为此,您需要使用: public boolean onPrepareOptionsMenu (Menu menu) 该代码将在每次显示选项菜单之前执行。 更多信息。您的意思是要动态更新菜单项吗? override onPrepareOptionsMenu()

我注意到

@Override
public boolean onCreateOptionsMenu(Menu menu) {
只会接到一次电话。我需要在每次显示菜单时调用它,因为我根据应用程序状态从菜单中添加/删除项目


这可能吗?

是的。为此,您需要使用:

public boolean onPrepareOptionsMenu (Menu menu) 
该代码将在每次显示选项菜单之前执行。
更多信息。

您的意思是要动态更新菜单项吗?
override onPrepareOptionsMenu()

如果希望每次打开菜单时都对其进行更改,则需要考虑其他内容,具体取决于Android sdk版本

这是《开发者指南》所说的:

如果要根据“活动”生命周期中发生的事件修改“选项”菜单,可以在onPrepareOptions菜单()方法中进行修改。此方法按菜单对象当前存在的状态传递给您,以便您可以对其进行修改,例如添加、删除或禁用项。(片段还提供onPrepareOptions菜单()回调。)

在Android 2.3.x及更低版本上,每次用户打开选项菜单(按下菜单按钮)时,系统都会调用onPrepareOptions菜单()

在Android 3.0及更高版本上,当操作栏中显示菜单项时,选项菜单被认为始终处于打开状态。当事件发生并且要执行菜单更新时,必须调用InvalidateOptions菜单()以请求系统调用PrepareOptions菜单()


+1要包含关于InvalidateOptions菜单()的部分,只需在设置布尔值或在菜单之间切换时调用getActivity().InvalidateOptions菜单()。