2014-03-12 20 views
1

我遇到以下問題 - 在我的應用程序中,有些事情發生後,我必須更新ActionBar菜單。我使用appcompat庫中的ActionBarActivity是supportInvalidateOptionsMenu()的工作?

所以,我打電話supportInvalidateOptionsMenu()功能,但菜單不會更新。 在調試模式下,我看到,onCreateOptionMenu方法正在調用,但菜單未更改。

我做錯了什麼?或者是否是ActionBarActivity問題?

回答

11

在系統調用onCreateOptionsMenu()之後,它會保留您填充的菜單實例,並且不會再次調用onCreateOptionsMenu(),除非菜單由於某種原因而失效。但是,只應使用onCreateOptionsMenu()來創建初始菜單狀態,而不是在活動生命週期中進行更改。

如果要根據活動生命週期中發生的事件修改選項菜單,可以在onPrepareOptionsMenu()方法中執行此操作。該方法將當前存在的Menu對象傳遞給您,以便您可以對其進行修改,例如添加,刪除或禁用項目。 (Fragments還提供onPrepareOptionsMenu()回撥。)

在Android 2.3.x及更低版本上,每次用戶打開選項菜單(按下菜單按鈕)時,系統都會調用onPrepareOptionsMenu()

在Android 3.0及更高版本上,當菜單項出現在操作欄中時,選項菜單被認爲始終打開。發生事件並且想要執行菜單更新時,必須致電invalidateOptionsMenu()請求系統調用onPrepareOptionsMenu()

更多詳細信息click here

+0

它的工作原理。謝謝! –

+0

使用支持庫時,您還可以調用supportInvalidateOptionsMenu()以使菜單中的選項無效。 –