2010-08-05 86 views
3

我想在一个活动中创建一个选项菜单,从一个服务开始,然后根据来自通过处理程序传递的服务的消息更改其UI。Android - 选项菜单不会工作

我设置的选项菜单如下:


 /** Menu creation and setup **/ 

     /* Creates the menu items */ 
     public boolean onCreateOptionsMenu(Menu menu) { 
      menu.add(0, 1, 0, "Speaker"); 
      menu.add(0, 2, 0, "Mute"); 
      return true; 
     } 

     /* Handles item selections */ 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case 1: 
       //Do something here 
       return true; 
      case 2: 
       //Do something here 
       return true; 
      } 
      return false; 
     } 

但是,当我的应用程序运行在所有它永远不会被调用。

我遇到过问题,我需要使用处理程序来更改屏幕上的文本,因为信息正在传递给错误的线程,请问这个问题可能导致菜单不显示?

是这样我怎么能解决这个问题,因为我不能在处理程序

+1

您的活动已创建,但不是菜单? – Sephy 2010-08-05 10:13:04

+0

是的我的活动显示正常,但是当我按菜单按钮什么也没有发生 – 2010-08-05 10:19:56

回答

5

确保你是不是消费关键处理程序中菜单的关键事件。在由onCreateOptionsMenu函数处理之前,菜单按钮事件通过密钥处理程序发送。这可能发生在任何关注焦点的视角或活动本身。快速解决这个问题的方法如下:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_MENU) 
     return super.onKeyDown(keyCode, event); 
    -- insert all other key handling code here -- 
    return false; 
} 
+0

干杯!由于我的两项活动没有显示“全局菜单”,因此我整晚都拔掉头发,即使它们是从同一个“全局菜单基类”继承而来的。结果发现问题正是你指出的:一些在我的activites中自动创建的onKeyDown方法已经接管了。非常感谢! – Spock 2011-12-17 21:52:31

2

尝试调用父类方法在你重写onCreateOptionsMenu方法如下覆盖方法:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    boolean result = super.onCreateOptionsMenu(menu); 
    menu.add(0, 1, 0, "Speaker"); 
    menu.add(0, 2, 0, "Mute"); 

    return result; 
}