4 Stimmen

onKeyDown-Ereignis nicht beim ersten Mal aufgerufen?

Ich habe ein onKeyDown-Ereignis, das den ersten Tastendruck nicht erkennt (nicht einmal das Ereignis eingeben, ich habe getestet, indem Sie eine "Toast" Ausgabe). Auf die zweite Taste drücken und nach, es funktioniert perfekt. Wenn ich auf ein anderes Element auf dem Bildschirm klicken und versuchen Sie die Taste drücken wieder, es braucht noch einmal eine weitere Taste drücken, um es zu starten. Hier ist der Code:

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;
    }

Ich bin schon seit Stunden ratlos, daher bin ich für jede Hilfe dankbar!

2voto

boba911 Punkte 21

Ich bin sicher, dass es gute Gründe für ein solches Verhalten gibt, aber ich glaube nicht, dass das Entfernen des Fokus eine gute Lösung ist. Mein Workaround ist, ein Keydown-Ereignis auszulösen, das die reguläre onKeyDown-Funktionalität "aktiviert". Hier ist ein Schnipsel:

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

}).start();

0voto

jonathanzh Punkte 1278

Um dieses Problem zu beheben, müssen Sie den Fokus der Ansicht entfernen, bevor Sie eine DPAD-Taste drücken. In meinem Fall funktioniert das. Ich habe genau das gleiche Problem: Wenn eine Ansicht einer Android-Aktivität den Fokus hat, wird das allererste DPAD-Tastenereignis, d. h. das KeyDown Ereignis, wird ignoriert: Keine dieser Methoden wird aufgerufen: onUserInteraction() , dispatchKeyEvent() , onKeyDown() . Allerdings sind die nachfolgenden DPAD-Schlüsselereignisse - KeyUp , KeyDown , KeyUp , ..., können erfasst werden.

Beachten Sie, dass dieses Problem weder bei Softkeys (Home, Previous, Recents) noch bei Hardbuttons (BUTTON_A, BUTTON_B, BUTTON_X, BUTTON_Y) auftritt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X