supportInvalidateOptionsMenu()有效吗?

时间:2014-03-12 15:43:03

标签: android

我遇到以下问题 - 在发生某些事情后,我必须在我的应用程序中更新ActionBar菜单。我使用appcompat库中的ActionBarActivity

所以,我调用supportInvalidateOptionsMenu()函数,但菜单不会更新。 在调试模式中,我看到onCreateOptionMenu方法正在调用,但是菜单没有改变。

我做错了吗?或者它是ActionBarActivity问题吗?

1 个答案:

答案 0 :(得分:11)

系统调用onCreateOptionsMenu()后,它会保留您填充的菜单实例,除非由于某种原因导致菜单失效,否则不会再次调用onCreateOptionsMenu()。但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态,而不是在活动生命周期中进行更改。

如果要根据活动生命周期中发生的事件修改选项菜单,可以使用onPrepareOptionsMenu()方法执行此操作。此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()回调。)

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

在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生且您想要执行菜单更新时,您必须致电invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()

了解更多详情click here