2010-12-12 67 views
15

的生命週期中只被調用一次,我注意到,onCreateOptionsMenu(菜單菜單)的活動

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

只被調用一次。每次菜單顯示時我都需要調用它,因爲我根據應用程序狀態從菜單中添加/刪除項目。

這是可能的嗎?

回答

28

是的。要做到這一點,您需要使用:

public boolean onPrepareOptionsMenu (Menu menu) 

該代碼將在您的選項菜單顯示之前每次執行。 更多信息here

2

你的意思是你想動態更新菜單項? override onPrepareOptionsMenu()

9

如果您希望菜單在每次打開時都進行更改,還有其他要考慮的內容取決於Android sdk版本。

這是開發者指南說:

如果要修改基於活動的生命週期期間發生的事件的選項菜單中,您可以在onPrepareOptionsMenu()方法做到這一點。該方法將當前存在的Menu對象傳遞給您,以便您可以對其進行修改,例如添加,刪除或禁用項目。 (片段還提供了一個onPrepareOptionsMenu()回調)。在Android 2.3.x及更低版本中,每次用戶打開選項菜單(按下菜單按鈕)時,系統調用onPrepareOptionsMenu()。

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

+0

+1對於包含關於invalidateOptionsMenu()的部分+1只是在設置布爾值或設置布爾值之後調用getActivity()。invalidateOptionsMenu()。 – whyoz 2013-08-13 00:54:39