我遇到以下问题 - 在发生某些事情后,我必须在我的应用程序中更新ActionBar
菜单。我使用appcompat库中的ActionBarActivity
。
所以,我调用supportInvalidateOptionsMenu()
函数,但菜单不会更新。
在调试模式中,我看到onCreateOptionMenu方法正在调用,但是菜单没有改变。
我做错了吗?或者它是ActionBarActivity
问题吗?
答案 0 :(得分:11)
系统调用onCreateOptionsMenu()
后,它会保留您填充的菜单实例,除非由于某种原因导致菜单失效,否则不会再次调用onCreateOptionsMenu()
。但是,您应该仅使用onCreateOptionsMenu()
来创建初始菜单状态,而不是在活动生命周期中进行更改。
如果要根据活动生命周期中发生的事件修改选项菜单,可以使用onPrepareOptionsMenu()
方法执行此操作。此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()
回调。)
在Android 2.3.x及更低版本上,每次用户打开选项菜单(按菜单按钮)时,系统都会调用onPrepareOptionsMenu()
。
在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生且您想要执行菜单更新时,您必须致电invalidateOptionsMenu()
以请求系统调用onPrepareOptionsMenu()
。
了解更多详情click here