2013-05-13 58 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); 
}