我正在尝试在从服务启动的Activity中创建一个Options菜单,然后根据来自通过Handler传递的服务的消息更改其UI。
我按如下方式设置了“选项”菜单:
/** 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;
}
但是当我的应用程序运行时,它永远不会被调用。
我遇到过一些问题,我需要使用Handler来更改屏幕上的Text,因为信息是在错误的线程上传递的,是否同样的问题导致菜单无法显示?
我是如何修复它的,因为我无法覆盖处理程序中的方法
答案 0 :(得分: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;
}
答案 1 :(得分:2)
尝试在覆盖的onCreateOptionsMenu方法中调用super方法,如下所示:
@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;
}