2013-03-18 48 views
0

我的問題是,我想將MenuItem中的圖標從Visible更改爲不可見,但是這個課程需要通過onOptionsItemSelected進行。如果我在菜單上調用,它將獲得點擊的MenuItem,而另一個需要隱藏。而且我還檢查了定義MenuItem和findViewById的方法,因爲它不是視圖,所以無法工作。 讓我告訴你我的代碼的一部分,使之更加明確:更改另一個MenuItem onClick一個

@Override 
public boolean onOptionsItemSelected(MenuItem menu) { 
    switch (menu.getItemId()) { 
    case R.id.menu_refresh: 
     // Stuff 
    case R.id.menu_settings: 
     (Somehow point to R.id.menu_refresh).setVisible(false); 
    } 
    return super.onOptionsItemSelected(menu); 
} 

任何想法?

回答

1

我從docs讀到的,這種情況下有一個特殊的方法:onPrepareOptionsMenu(Menu menu)

準備顯示屏幕的標準選項菜單。在菜單顯示之前,每當顯示菜單時都會調用它。您可以使用此方法高效地啓用/禁用項目或以其他方式動態修改內容。

所以這使得它更像是這樣的:

@Override 
public boolean onOptionsItemSelected(MenuItem menu) { 
    switch (menu.getItemId()) { 
    case R.id.menu_refresh: 
     // Stuff 
    case R.id.menu_settings: 
     showRefresh = false; 
     //Stuff 
    } 
    return super.onOptionsItemSelected(menu); 
} 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.findItem(R.id.menu_refresh).setVisible(showRefresh); 
    return super.onPrepareOptionsMenu(menu); 
} 
+0

非常感謝!這是一個很好的答案。 – TimeWasterNL 2013-03-18 16:44:07

1

如果你正在做一個2.3樣式菜單,你不要在onOptionsItemSelected中改變它。在下一次菜單啓動時(通過保存適合保存的任何數據),您可以在onPrepareOptionsMenu中執行此操作。

如果您有一個操作欄,您需要在活動上調用invalidateOptionsMenu以重新加載菜單,並在create函數中執行禁用。

+0

雖然我已經與對方的回答了,我upvoted這一點。我完全忘記了舊的SDK版本,謝謝! – TimeWasterNL 2013-03-18 16:44:52