Manejando eventos de usuario

Android captura los distintos eventos de usuario de forma homogénea y se los pasa a la clase encargada de recogerlos. Por lo general va a ser un objeto tipo View el que recogerá estos eventos por medio de dos técnicas alternativas. Los escuchadores de eventos (Event Listener) y los manejadores de eventos (Event Handler).

Escuchador de eventos

Un Escuchador de eventos o  Event Listener es una interfaz de la clase View que contiene un métodocallback que ha de ser registrado. Cada Escuchador de Eventos tiene solo un método callback, que será llamado por Android cuando se produzca la acción correspondiente. Tenemos los siguientes escuchadores de eventos:

onClick()

Método de la interfaz View.OnClickListener. Se llama cuando el usuario selecciona un elemento. Se puede utilizar cualquier medio como la pantalla táctil, las teclas de navegación o eltrackball.

onLongClick()

Método de la interfaz View.OnLongClickListener. Se llama cuando el usuario selecciona un elemento durante más de un segundo.

onFocusChange()

Método de la interfaz View.OnFocusChangeListener. Se llama cuando el usuario navega dentro o fuera de un elemento.

onKey()

Método de la interfaz View.OnKeyListener. Se llama cuando se pulsa o se suelta una tecla del dispositivo.

onTouch()

Método de la interfaz View.OnTouchListener. Se llama cuando se pulsa o se suelta o se desplaza en la pantalla táctil.

onCreateContextMenu()

Método de la interfaz View.OnCreateContextMenuListener. Se llama cuando se crea un menú de contexto.

Existen dos alternativas para crear un escuchador de evento. La primera es crear un objeto anónimo por ejemplo de la clase OnClickListener():

 

protected void onCreate(Bundle savedValues) {

      ...

      Button boton = (Button)findViewById(R.id.boton);

      boton.setOnClickListener( new OnClickListener() {

         public void onClick(View v) {

            // Acciones a realizar

         }

          });

      ...

   }

 

La segunda alternativa consiste en implementar la interfaz OnClickListener como parte de tu clase y recoger los eventos en el método onClick(). Esta alternativa es la recomendada por Android, al tener menos gasto de memoria. A continuación se muestra un ejemplo:

 

public class Ejemplo extends Activity implements OnClickListener{

           protected void onCreate(Bundle savedValues) {

               ...

              Button boton = (Button)findViewById(R.id.boton);

              boton.setOnClickListener(this);

           }

 

           public void onClick(View v) {

            // Acciones a realizar

           }

           ...

       }

 

Manejador de eventos

Si estás creando un descendiente de la clase View, podrás utilizar varios métodos (callback) directamente usados como manejadores de eventos por defecto (Event Handlers). En esta lista se incluye:

 

 

onKeyDown(int keyCode, KeyEvent e) Llamado cuando una tecla es pulsada.

onKeyUp(int keyCode, KeyEvent e)             Cuando una tecla deja de ser pulsada.

onTrackballEvent(MotionEvent me)             Llamado cuando se mueve el trackball.

onTouchEvent(MotionEvent me)                    Cuando se pulsa en la pantalla táctil.

onFocusChanged(boolean obtengoFoco, int direccion, Rect           prevRectanguloFoco)                   Llamado cuando cambia el foco.

 

Es la forma más sencilla, dado que no hace falta usar una interfaz, ni registrar el método callback. Como en nuestro ejemplo estamos creando JuegoView, que es un descendiente de View, podremos utilizar directamente manejadores de evento.

Puedes ver algunos aspectos relacionados en formato poli[Media]

Escuchador y manejador de eventos