3

我正在尝试在从服务启动的 Activity 中创建一个选项菜单,然后根据来自通过处理程序传递的服务的消息更改其 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;
        }  

但是当我的应用程序运行时它永远不会被调用。

我遇到了需要使用处理程序更改屏幕上的文本的问题,因为信息在错误的线程上传递,同样的问题可能是菜单不显示的原因吗?

那么我该如何解决它,因为我无法覆盖处理程序中的方法

4

2 回答 2

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;
}
于 2010-08-05T14:02:05.490 回答
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;
}
于 2010-08-05T13:52:06.733 回答