Работа с оборудованием Android Кнопка «Назад»

У меня есть событие onKeyDown , которое необходимо только для обработки аппаратных клавиш «Вверх» и «Вниз» в моем приложении. Для них это возвращает истину, поскольку они обрабатываются. Для всего остального он возвращает false, что, как я понимаю, означает, что ОС должна их обрабатывать. Однако когда я нажимаю кнопку «Назад», мой onKeyDown вызывается и возвращает false, но другого эффекта нет. Я хочу / ожидал, что ОС завершит текущее действие и возобновит предыдущее.

Это правильное поведение, или что-то не так?

Обновление:

Приветствия, ребята, мой Процедура onKeyDown выглядит следующим образом, теперь я последовал совету CommonsWare:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);

    boolean handled = true;

    // handle key presses
    switch (keyCode) {

    case KeyEvent.KEYCODE_DPAD_LEFT:
        mCursorX = mCursorX - 1;
        if (mCursorX < MAP_MIN_X) { mCursorX = MAP_MIN_X; }
        break;

    case KeyEvent.KEYCODE_DPAD_RIGHT:
        mCursorX = mCursorX + 1;
        if (mCursorX > MAP_MAX_X) { mCursorX = MAP_MAX_X; }
        break;

    default:
        handled = false;

    if (handled) {
        redrawCursorno();
        return true;
    }

    return super.onKeyDown(keyCode,event);
}

Мой класс выглядит следующим образом:

public class Map extends Activity implements OnClickListener, SurfaceHolder.Callback, OnTouchListener {

Должен признать, я не знал, почему там были @override и первая строка 'super', они были просто во всех процедурах, на которые я смотрел. Если super.onKeyDown запускает onKeyDown для Activity, то я, вероятно, не хочу его в начале, только в конце, если моя подпрограмма не справляется с этим, что я и добавил. Звучит ли это правильно или я все еще в замешательстве?

-Frink

8
задан FrinkTheBrave 22 August 2010 в 18:13
поделиться

3 ответа

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

return(false);

do:

return(super.onKeyDown(...));
6
ответ дан 5 December 2019 в 15:16
поделиться

Вы можете переопределить метод onBackPressed (), он будет вызываться, когда действие обнаружит нажатие пользователем клавиши возврата. В этом случае вам не нужно использовать метод onKeyDown.

4
ответ дан 5 December 2019 в 15:16
поделиться

Кроме того, super.onKeyDown () вызывается дважды: один раз в начале функции и один раз в конце. Вам понадобится только тот, который находится в конце.

1
ответ дан 5 December 2019 в 15:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: