2013-05-13 4 views
0

Я просто хочу, чтобы меню опций переключало мое скользящее меню, но havent нашла стандартное нажатие кнопки для кнопки параметров. Является ли 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); 
} 

ПРИМЕЧАНИЕ: ниже решение является для ActionBar

Просто переопределить функцию 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. –

+1

Вы говорите о старой физической кнопке? Кнопка меню в правом нижнем углу экрана? –

+0

да действительно. (иногда с левой стороны, например, Samsung Galaxy S2) –

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); 
} 
Смежные вопросы