Атрибут меню onClick и аргумент метода

Я практикую добавление пунктов меню и пытаюсь реагировать на клики пунктов меню. Согласно руководству разработчика, там сказано:

Совет. В Android 3.0 добавлена ​​возможность определять поведение элемента меню при щелчке в формате XML с помощью атрибута android:onClick. Значением атрибута должно быть имя метода, определенного действием с помощью меню. Метод должен быть общедоступным и принимать один параметр MenuItem — когда система вызывает этот метод, она передает выбранный пункт меню. Дополнительные сведения и пример см. в документе «Ресурс меню».

Однако пример кода на той же странице не следует правилу: методы не передают параметр MenuItem. Пример кода:

@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);
    }
}

Мой вопрос: не должны ли вызовы метода быть newGame (элемент MenuItem) и showHelp (элемент MenuItem) вместо newGame () и showHelp ()? Когда я тестировал свой собственный, на самом деле был необходим аргумент (элемент MenuItem), иначе приложение падало, даже если оно компилировалось правильно.

Любая помощь будет оценена по достоинству.


person ElectroJunkie    schedule 03.02.2014    source источник


Ответы (1)


onOptionsItemSelected — это альтернатива определению атрибутов onClick и тому, что было доступно до Android 3.0 (важно, если вы хотите обеспечить обратную совместимость). Это просто другой способ обеспечения того же самого процесса. Конечно, onClick может привести к сбою вашего приложения во время выполнения, а не onOptionsItemSelected, не обрабатывая пункт меню (просто заставляя его ничего не делать).

person ianhanniballake    schedule 03.02.2014
comment
О, похоже, я могу использовать любой из них, но не вместе. Я должен попробовать это. Кажется, я неправильно прочитал руководство :s - person ElectroJunkie; 03.02.2014
comment
Спасибо. Действительно, все, что мне было нужно, это onClick, без onOptionItemSelected :) - person ElectroJunkie; 07.02.2014