onOptionsItemSelected返回错误的ID

时间:2011-08-19 19:39:03

标签: android menu

(Newbe)

当我点击一个菜单时,上面的方法会从第一个菜单返回一个ID,而不是我点击的那个ID。如果我检查菜单的标题浓缩是正确的。

int id = item.getItemId();   //returns id of an incorrect menu
String Title = (String) item.getTitleCondensed();  //this returns the correct title.

欢迎任何想法。

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。构建中生成的文件未正确更新。

如果我重新排序xml中的菜单项...构建和惊喜,我也有同样的效果。单击菜单会显示除预期之外的其他代码。

干净并再试一次

答案 1 :(得分:1)

您应该在onCreateOptionsMenu和onCreateContextMenu中为每个菜单项设置唯一ID。

例如:

    public static final int CONTEXT_MENU_DELETE = Menu.FIRST;
    public static final int CONTEXT_MENU_EDIT = CONTEXT_MENU_DELETE + 1;

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, 
                    ContextMenuInfo menuInfo) {

            menu.add(0, CONTEXT_MENU_DELETE, 1, R.string.delete);
            menu.add(0, CONTEXT_MENU_EDIT, 2, R.string.edit);
    }

    // And then

    @Override
    public boolean onContextItemSelected(MenuItem item) {

            switch(item.getItemId()) {

            case CONTEXT_MENU_DELETE:
                    // Delete item
                    break;

            case CONTEXT_MENU_EDIT:
                    // Edit item
                    break;
            }
    }

onCreateOptionsMenu和onOptionsItemSelected也是如此。每个菜单选项都应该有一个唯一的常量。

添加了:

你没有看到this tutorial吗? 这个想法是一样的。您应该在menu.xml中设置不同的ID:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/new_game"
              android:icon="@drawable/ic_new_game"
              android:title="@string/new_game" />
        <item android:id="@+id/help"
              android:icon="@drawable/ic_help"
              android:title="@string/help" />
    </menu>

然后在onOptionsItemSelected中使用这些ID:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.new_game:
            newGame();
            return true;
        case R.id.help:
            showHelp();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

从官方Android菜单教程中查看这些代码块,并与您自己的代码进行比较。您还可以发布menu.xmlonCreateOptionsMenuonOptionsItemSelected,以便轻松找出问题所在。