onCreateOptionsMenu(Menu menu)方法在Activity的生命周期中只会被调用一次

15

我注意到

@Override
public boolean onCreateOptionsMenu(Menu menu) {

只被调用了一次。因为我根据应用程序的状态添加/删除菜单项,所以需要每次显示菜单时都调用此函数。

这是否可能?

3个回答

28

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

public boolean onPrepareOptionsMenu (Menu menu) 

每次显示选项菜单之前,该代码都将被执行。 更多信息在此处


9
如果你希望菜单每次打开都会改变,那么还有一些需要考虑的事情,这取决于Android SDK版本。
以下是开发者指南中的说明:
如果你想根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中进行。该方法会将当前的Menu对象传递给你,因此你可以对其进行修改,如添加、删除或禁用项目。(片段也提供了一个onPrepareOptionsMenu()回调。)
在Android 2.3.x及更低版本中,系统每次用户打开选项菜单(按下菜单按钮)时都会调用onPrepareOptionsMenu()。
在Android 3.0及更高版本中,当菜单项在操作栏中呈现时,选项菜单被视为始终处于打开状态。当事件发生并且你想执行菜单更新时,必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。

包括invalidateOptionsMenu()部分的+1...在您设置用于在菜单之间切换的布尔值或其他内容后,只需在某个位置调用getActivity()。invalidateOptionsMenu()即可。 - whyoz

2
你的意思是想动态更新菜单项吗?覆盖onPrepareOptionsMenu()方法即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接