2010-08-22 21 views
8

Tengo un evento onKeyDown que solo es necesario para manejar las teclas de arriba y abajo de mi aplicación. Para estos devuelve verdadero, ya que se manejan. Para cualquier otra cosa, devuelve falso, lo que entiendo significa que el sistema operativo debe manejarlos. Sin embargo, cuando presiono el botón Atrás, se llama a mi onKeyDown y devuelve falso, pero no hay otro efecto. Quiero/espero que el sistema operativo termine el actual Activity y reanude el anterior.Manejo del hardware de Android Botón Atrás

¿Es este comportamiento correcto, o hay algo amis?

Actualización:

Saludos muchachos, mis miradas de rutina onKeyDown como este, ahora que he seguido el consejo de 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); 
} 

Mi clase se parece a:

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

debo admitir No sabía por qué la @override y la primera línea 'super' estaban allí, solo estaban en todas las rutinas que vi. Si el super.onKeyDown ejecuta el onKeyDown para la actividad, entonces probablemente no lo desee al principio, solo al final si mi rutina no lo maneja, que creo que es lo que he agregado. ¿Eso suena correcto o todavía estoy confundido?

-Frink

+0

¿Está intentando esto en una vista web? – Sephy

+0

Publica tu código. – Falmarri

Respuesta

6

lo recomiendo encadenar a la superclase. En otras palabras, en lugar de:

return(false); 

hacer:

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

Puede reemplazar el método onBackPressed(), que se llamará cuando la actividad se ha detectado la prensa del usuario de la tecla de retroceso. En este caso, no necesita usar el método onKeyDown.

+0

tenga en cuenta que 'onBackPressed()' no se invocará sin la edición para devolver el valor de 'super.onKeyDown()' –

1

Además, llama a super.onKeyDown() dos veces: una vez al principio de la función y una vez al final. Solo deberías necesitar el que está al final.

Cuestiones relacionadas