2010-12-12 150 views
15

的生命周期中只被调用一次,我注意到,onCreateOptionsMenu(菜单菜单)的活动

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

只被调用一次。每次菜单显示时我都需要调用它,因为我根据应用程序状态从菜单中添加/删除项目。

这是可能的吗?

回答

28

是的。要做到这一点,您需要使用:

public boolean onPrepareOptionsMenu (Menu menu) 

该代码将在您的选项菜单显示之前每次执行。 更多信息here

2

你的意思是你想动态更新菜单项? override onPrepareOptionsMenu()

9

如果您希望菜单在每次打开时都进行更改,还有其他要考虑的内容取决于Android sdk版本。

这是开发者指南说:

如果要修改基于活动的生命周期期间发生的事件的选项菜单中,您可以在onPrepareOptionsMenu()方法做到这一点。该方法将当前存在的Menu对象传递给您,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供了一个onPrepareOptionsMenu()回调)。在Android 2.3.x及更低版本中,每次用户打开选项菜单(按下菜单按钮)时,系统调用onPrepareOptionsMenu()。

在Android 3.0及更高版本上,当菜单项出现在操作栏中时,选项菜单被认为始终打开。当发生事件并且想要执行菜单更新时,必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。

+0

+1对于包含关于invalidateOptionsMenu()的部分+1只是在设置布尔值或设置布尔值之后调用getActivity()。invalidateOptionsMenu()。 – whyoz 2013-08-13 00:54:39