我有一个Activity,其中包含两个ListFragments。这两个片段都会向菜单贡献菜单项。我设置了一个MenuItem的android:showAsAction属性,以便将其显示为ActionBar上的按钮,它能正常工作。
现在,这个MenuItem的状态是依赖于状态的。它是暂停/恢复队列的菜单选项。我的问题是我无法弄清楚如何在创建Fragment时设置其初始状态。
它的状态取决于队列是否被暂停。因此,我有一个AsyncTask来获取队列,并根据队列的状态设置一个布尔值(pause)。我调用onPrepareOptionsMenu来基于队列的上一个已知状态设置暂停菜单项的文本,如果我将MenuItem保留在实际菜单中,这样做非常有效。您点击菜单图标,onPrepareOptionsMenu被触发并在显示菜单之前更新菜单。
问题是,如果我将同一MenuItem放在ActionBar上(显示为操作按钮),我如何强制它更新而不必调用onPrepareOptionsMenu?我需要能够这样做,因为在第一次启动应用程序时,我发送请求以获取队列,但任务返回后ActionBar已经配置和显示。在我的片段中,我创建了一个处理程序,每次我获得队列更新时都会被调用,但我该怎么更新ActionBar上MenuItem的文本呢?除了onPrepareOptionMenu,我似乎找不到其他方法来获取当前设置的菜单以操纵它。
现在,这个MenuItem的状态是依赖于状态的。它是暂停/恢复队列的菜单选项。我的问题是我无法弄清楚如何在创建Fragment时设置其初始状态。
它的状态取决于队列是否被暂停。因此,我有一个AsyncTask来获取队列,并根据队列的状态设置一个布尔值(pause)。我调用onPrepareOptionsMenu来基于队列的上一个已知状态设置暂停菜单项的文本,如果我将MenuItem保留在实际菜单中,这样做非常有效。您点击菜单图标,onPrepareOptionsMenu被触发并在显示菜单之前更新菜单。
问题是,如果我将同一MenuItem放在ActionBar上(显示为操作按钮),我如何强制它更新而不必调用onPrepareOptionsMenu?我需要能够这样做,因为在第一次启动应用程序时,我发送请求以获取队列,但任务返回后ActionBar已经配置和显示。在我的片段中,我创建了一个处理程序,每次我获得队列更新时都会被调用,但我该怎么更新ActionBar上MenuItem的文本呢?除了onPrepareOptionMenu,我似乎找不到其他方法来获取当前设置的菜单以操纵它。
supportInvalidateOptionsMenu()
而不是其他方法。 - Tim KistsupportInvalidateOptionsMenu()
现在已经过时了,你可以安全地使用invalidateOptionsMenu()
。 - c0dehunter