Как правильно перехватывать нажатие кнопок?

Ответить
Prospekt
Сообщения: 41
Зарегистрирован: 30 май 2012, 23:06

Как правильно перехватывать нажатие кнопок?

Сообщение Prospekt » 10 июн 2012, 18:34

Есть активити и переопределенный SurfaceView в котором идет обработка нажатия.

При нажатии на кнопку "меню" или "назад" элемент должен переводится в режим паузы. Но требуемая реакция на нажатие возникает не всегда.

Если до этого не нажимать на кнопки, тогда программа не видит эти кнопки, т.е. само событие не приходит. А вот если нажать например кнопку вниз, то после этого все начинает работать правильно.

Код не привожу, так как он очень большой. Скажу лишь, что есть флаг isPause, который меняется в обработчике нажатия и считывается при отработке такта (события от таймера-потока). Т.е. все тупо и шаблонно. Вероятность, что баг в коде стремится к нулю. Скорей всего это как-то связано с самой системой.

setFocusable(true); делал.

Другими словами, обработка нажатий начинается после нажатия на крестовину, и перестает работать если прикоснуться к экрану.
Как быть? Что не так?

Prospekt
Сообщения: 41
Зарегистрирован: 30 май 2012, 23:06

Re: Как правильно перехватывать нажатие кнопок?

Сообщение Prospekt » 10 июн 2012, 18:46

перенес обработку нажатия кнопок из SurfaceView в Activity, и все начало работать правильно.
Пересмотрел статью создания игры Дарьи Ряжской, там она перехватывала нажатие именно в SurfaceView , а не в Activity.
Вобщем что за фигня и как делать правильно?

PS: После изменения кода активити на

Код: Выделить всё

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(surface!=null){return surface.onKeyDown(keyCode, event);}
        return super.onKeyDown(keyCode, event);
    }
приложение не выходит (не закрывается) даже если вернуть во внутреннем обработчике false. А по логике (и так надо) должно. Я понимаю, что можно самому завершать активити, но ведь это баг.

Ответить