У меня есть событие 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
Я бы порекомендовал привязать к суперклассу. Другими словами, вместо:
return(false);
do:
return(super.onKeyDown(...));
Вы можете переопределить метод onBackPressed (), он будет вызываться, когда действие обнаружит нажатие пользователем клавиши возврата. В этом случае вам не нужно использовать метод onKeyDown.
Кроме того, super.onKeyDown () вызывается дважды: один раз в начале функции и один раз в конце. Вам понадобится только тот, который находится в конце.