我注意到了
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Run Code Online (Sandbox Code Playgroud)
只被召唤一次.我需要在每次显示菜单时调用它,因为我根据应用程序状态在菜单中添加/删除项目.
这可能吗?
Lui*_*ano 28
是.要做到这一点,你需要使用:
public boolean onPrepareOptionsMenu (Menu menu)
Run Code Online (Sandbox Code Playgroud)
每次显示选项菜单之前,都会执行该代码.更多信息在这里.
小智 9
如果您希望每次打开时都更改菜单,则需要考虑的其他因素取决于Android sdk版本.
这是开发人员指南所说的:
如果要根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中执行此操作.此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目.(片段还提供onPrepareOptionsMenu()回调.)
在Android 2.3.x及更低版本中,每次用户打开选项菜单(按菜单按钮)时,系统都会调用onPrepareOptionsMenu().
在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开.当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu().