У меня есть событие 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