2011-05-21 82 views
21

我很好奇在針對API 11或更高版本時如何(如果有的話)onPrepareOptionsMenu(Menu)(以及擴展名爲onPreparePanel(int, View, Menu))在Android 3.0+上使用。在Android 3.0+上使用`onPrepareOptionsMenu()`

我的思路如下:

ActivityActionBaronCreateOptionsMenu(Menu)接收其內容在這裏你可以膨脹的XML菜單資源,直接添加項目,或兩者的某種組合。活動的任何片段也將接收此調用,並可選擇執行相同操作。

要更新ActionBar上的項目,您可以保留Menu實例或致電invalidateOptionsMenu(),然後再結束調用onCreateOptionsMenu(Menu)

因此,是否onPrepareOptionsMenu(Menu)然後只支持遺留應用程序不支持API 11或更新?

撥打getActionBar().hide()getActionBar().show()是否可能觸發onPrepareOptionsMenu(Menu)

是否添加或刪除片段以某種方式觸發此?

回答

10

從我的廣泛測試中,奇怪的是,它看起來和平臺3.0以前的版本完全一樣,只有在打開overflow菜單時纔會調用它。該回調沒有觸發原始問題中列出的任何事件。

一個可能很明顯但值得注意的事實:整個菜單可以在回調中訪問,因此可以在操作欄,溢出菜單和/或隱藏處理可見的項目。

+1

我實際上得到不同的行爲。在調用'invalidateOptionsMenu()'後,測試3.2和4.1.1,我調用了'onCreateOptionsMenu()',然後調用'onPrepareOptionsMenu()'。我不認爲他們必須互相呼叫,但這是他們進來的順序。因此,我在'onPrepareOptionsMenu()'和onCreateOptionsMenu()'中保留了所有運行時更改,我只對該菜單進行充氣。在3.0之前,當用戶打開菜單時,它會自行處理,當> 3.0時,我需要刷新ActionBar時調用'invalidateOptionsMenu'。 – 2012-10-11 00:50:00

4

SICE我最近有類似的問題,並st upon在這一個,我想補充爲以後的讀者: 是的,onPrepareOptionsMenu仍然工作。然而,你應該只爲Honeycomb設備調用標準實現(即如果(android.os.Build.VERSION.SDK_INT> = 11)返回super.onPrepareOptionsMenu(menu);)並使用invalidateOptionsMenu()(如果需要的話,通過反射)和onCreateOptionsMenu()來代替,尤其是,當使用showAsAction。否則,菜單在打開之前不會更新。例如,如果您在選擇某個項目時添加了一些條目,則在菜單打開時這些項目將奇蹟般地出現在操作欄中,而不是在項目被選中時出現。取消選擇和隱藏菜單項也是一樣。

相關問題