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

因此,我调用supportInvalidateOptionsMenu()函数,但是菜单不会更新。
在调试模式下,我看到正在调用onCreateOptionMenu方法,但菜单未更改。

难道我做错了什么?还是ActionBarActivity问题?

最佳答案

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

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

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

在Android 3.0及更高版本上,如果在操作栏中显示菜单项,则认为选项菜单始终处于打开状态。当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()

有关更多详细信息,click here

09-25 21:02