Событие onKeyDown не вызывается в первый раз? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть событие onKeyDown, которое не распознает первое нажатие клавиши (даже не войдя в событие, я проверил, выполнив вывод «toast»). На второй клавише нажимаешь и после, все работает отлично. Если я нажимаю на другой элемент на экране и снова пытаюсь нажать клавишу, ему снова нужно нажать еще одну клавишу, чтобы начать работу. Вот код:

public boolean onKeyDown(int keyCode, KeyEvent event)
{
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_LEFT:
        scorered.performClick();
        return true;


    case KeyEvent.KEYCODE_1:
        red_m1.performClick();
        return true;


        case KeyEvent.KEYCODE_DPAD_RIGHT: 
        scoreblue.performClick();
        return true;


        case KeyEvent.KEYCODE_2: 
        blue_m1.performClick();
        return true;

        case KeyEvent.KEYCODE_BACK:
            finish();
        return true;
    }
    return true;
    }

Я был в тупике часами, поэтому любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 30 января 2014

Я уверен, что для такого поведения есть веские причины, но не думайте, что удаление фокуса является хорошим решением.Мой обходной путь - запустить событие keydown, которое «активирует» обычную функцию onKeyDown.Вот фрагмент:

new Thread(new Runnable() {         
    @Override
    public void run() {
        Instrumentation inst = new Instrumentation();
        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    }

}).start(); 
0 голосов
/ 05 июля 2013

Чтобы исправить это, обходной путь заключается в удалении фокуса вида перед нажатием любой клавиши DPAD.Это работает в моем случае.У меня точно такая же проблема: когда представление Android Activity находится в фокусе, самое первое ключевое событие DPAD, то есть событие KeyDown, игнорируется: ни один из этих методов не вызывается: onUserInteraction(), dispatchKeyEvent(), onKeyDown().Однако последующие события клавиш DPAD - KeyUp, KeyDown, KeyUp, ... могут быть зафиксированы.

Обратите внимание, что эта проблема не возникает с программными клавишами (Home, Previous, Recents)ни с клавишами жестких кнопок (BUTTON_A, BUTTON_B, BUTTON_X, BUTTON_Y).

...