onOptionsItemSelected возвращает неверный идентификатор - PullRequest
4 голосов
/ 19 августа 2011

(Newbe)

Когда я нажимаю на меню, вышеуказанный метод возвращает идентификатор из первого меню, а не тот, который я щелкнул. Если я проверяю заголовок в сжатом меню, это правильно.

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

Любые идеи приветствуются.

Ответы [ 2 ]

7 голосов
/ 29 сентября 2012

У меня была такая же проблема. Сгенерированные файлы из сборки не обновляются должным образом.

Я получил тот же эффект, если переупорядочил пункты меню в сборке xml ... и удивился. Нажатие на меню приносит другие коды, чем ожидалось.

Сделайте чистку и попробуйте снова

1 голос
/ 20 августа 2011

Вы должны установить для каждого пункта меню уникальный идентификатор в onCreateOptionsMenu и onCreateContextMenu.

Например:

    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.У вас должна быть уникальная константа для каждого пункта меню.

Добавлено:

Разве вы не ознакомились с этим руководством ?Идея та же.Вы должны установить разные идентификаторы в 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>

, а затем использовать эти идентификаторы в 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);
        }
    }

Ознакомьтесь с этими блоками кода из официального руководства по Android Menu и сравнитек вашему собственному коду.Вы также можете опубликовать свои menu.xml, onCreateOptionsMenu и onOptionsItemSelected, чтобы было легче выяснить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...