代码之家  ›  专栏  ›  技术社区  ›  Donal Rafferty

Android-选项菜单不工作

  •  3
  • Donal Rafferty  · 技术社区  · 14 年前

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

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

    当信息在错误的线程上传递时,我遇到了需要使用处理程序来更改屏幕上的文本的问题,这个问题是否也是菜单不显示的原因?

    是的,我如何修复它,因为我不能重写处理程序中的方法

    2 回复  |  直到 14 年前
        1
  •  5
  •   Doge    14 年前

    确保没有在键处理程序中使用菜单的键事件。菜单按钮事件通过键处理程序发送,然后由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;
    }
    
        2
  •  2
  •   dfetter88    14 年前

    尝试在重写的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;
    }