Работа с оборудованием Android Кнопка «Назад» - PullRequest
8 голосов
/ 22 августа 2010

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

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

Обновление:

Приветствую вас, ребята, моя процедура 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.onKeyDown запускает onKeyDown для Activity, то я, вероятно, не хочу его в начале, только в конце, если моя подпрограмма не справляется с этим, что я и добавил. Звучит ли это правильно или я все еще в замешательстве?

-Frink

Ответы [ 3 ]

6 голосов
/ 22 августа 2010

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

return(false);

do:

return(super.onKeyDown(...));
4 голосов
/ 22 августа 2010

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

1 голос
/ 22 августа 2010

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

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