onOptionsItemSelected返回错误的ID

Ola*_*lan 5 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.
Run Code Online (Sandbox Code Playgroud)

欢迎任何想法.

mhs*_*nsc 8

我有同样的问题.生成的生成文件未正确更新.

如果我重新排序xml中的菜单项...构建和惊喜,我得到了相同的效果.单击菜单会带来除预期之外的其他代码.

干净,然后再试一次


Vic*_*tor 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;
            }
    }
Run Code Online (Sandbox Code Playgroud)

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

添加:

你没看过这个教程吗?这个想法是一样的。您应该在以下位置设置不同的 id menu.xml

    <?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>
Run Code Online (Sandbox Code Playgroud)

然后在以下位置使用这些 id onOptionsItemSelected

    @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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

查看官方 Android 菜单教程中的这些代码块,并与您自己的代码进行比较。您还可以发布您的menu.xmlonCreateOptionsMenu这样onOptionsItemSelected就很容易找出您的问题。