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