2010-08-22 5 views
8

Ich habe ein onKeyDown Ereignis, das nur für die Handhabung der Up und Down Hardware-Tasten in meiner App benötigt wird. Für diese gibt es wahr, wie sie behandelt werden. Für alles andere gibt es false zurück, was ich verstehe, bedeutet, dass das Betriebssystem mit ihnen umgehen sollte. Wenn ich jedoch die Zurück-Taste drücke, wird meine onKeyDown aufgerufen und gibt false zurück, aber es gibt keinen anderen Effekt. Ich möchte/würde erwarten, dass das Betriebssystem die aktuelle Activity beendet und die vorherige wieder aufnimmt.Umgang mit Android-Hardware Zurück-Taste

Ist das richtiges Verhalten oder gibt es etwas Amis?

Update:

Prost Jungs, meine onKeyDown Routine wie folgt aussieht, jetzt habe ich gefolgt CommonsWare Rat:

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

Meine Klasse wie folgt aussieht:

public class Map extends Activity implements OnClickListener, SurfaceHolder.Callback, OnTouchListener { 

Ich muss zugeben, Ich wusste nicht, warum die @ Override und die erste "Super" -Linie da waren, sie waren einfach in all den Routinen, die ich betrachtete. Wenn das super.onKeyDown das onKeyDown für die Aktivität ausführt, dann will ich es wahrscheinlich nicht am Anfang, nur am Ende, wenn meine Routine es nicht behandelt, was ich denke, was ich hinzugefügt habe. Klingt das richtig, oder bin ich immer noch verwirrt?

-Frink

+0

versuchen Sie dies auf einer Webansicht? – Sephy

+0

Geben Sie Ihren Code ein. – Falmarri

Antwort

6

würde ich auf die übergeordnete Verkettungs empfehlen. Mit anderen Worten, statt:

return(false); 

tun:

return(super.onKeyDown(...)); 
4

können Sie die onBackPressed() -Methode außer Kraft setzen, wird es aufgerufen werden, wenn die Aktivität des Benutzers Drücken der Zurück-Taste erkannt hat. In diesem Fall müssen Sie die onKeyDown-Methode nicht verwenden.

+0

Beachten Sie, dass 'onBackPressed()' nicht ohne die Änderung aufgerufen wird, um den Wert von 'super.onKeyDown()' zurückzugeben –

1

Außerdem rufen Sie super.onKeyDown() zweimal auf: einmal am Anfang der Funktion und einmal am Ende. Sie sollten nur den einen am Ende brauchen.