2013-05-13 55 views
0

我只是想要選項菜單切換我的滑動菜單,但沒有找到選項按鈕的標準點擊偵聽器。 OnPrepareOptionsMenu是單擊選項按鈕時觸發的唯一方法嗎?我真的不想使用這個方法,因爲這個方法在應用程序啓動時也會被觸發。on OptionsMenu click listener

回答

1

UPDATE:爲菜單按鈕(硬件按鈕),您可以使用事件的onkeyup:

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     if (event.getAction() == KeyEvent.ACTION_UP) 
     { 
      Log.d("onkeyup", "onkeyup"); 
      return true; 
     } 
    } 
    return super.onKeyUp(keyCode, event); 
} 

注意:下面的解決方案是爲動作條

只是覆蓋onOptionsItemSelected功能。 然後,您可以監聽所有的菜單項單擊事件,並觸發您根據案件需要採取的措施:

這裏是一個主要活動類的例子:

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch(item.getItemId()) { 

    case R.id.menu_calendar: 
     makeToast("Loading..."); 
     openCalendar(); 
     break; 
    case R.id.menu_search: 
     makeToast("Loading..."); 
     openSearch(); 
     break;  
    case R.id.menu_settings: 
     openSettings(); 
     break; 
    case R.id.menu_help: 
     openHelp(); 
     break; 
    case R.id.menu_about: 
     mBackupManager.dataChanged(); 
     openAbout(); 
     break; 
    } 
    return true; 
} 
+0

但是這個方法在點擊選項菜單右邊的項目時被調用?我想要一個方法在點擊選項菜單btn時被調用。每個Android設備上的一個。 – 2013-05-13 08:41:56

+1

你正在談論舊的物理按鈕?屏幕右下方的菜單按鈕? – 2013-05-13 08:43:50

+0

是的。 (有時在左側,例如Samsung Galaxy S2) – 2013-05-13 08:46:37

1

您需要Override菜單按鈕,這樣當用戶點擊菜單時,代碼就會被執行,而不是打開菜單。像這樣

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     //Put the code for an action menu from the top here 
     return true; 
    } 
return super.onKeyDown(keyCode, event); 
}