2010-09-20 11 views
89

En Android, la mayoría de los métodos de escucha de eventos devuelven un valor booleano. ¿Qué significa ese valor verdadero/falso? ¿Qué resultará en los eventos posteriores?Significado del valor booleano devuelto por un método de gestión de eventos en Android

class MyTouchListener implements OnTouchListener { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     logView.showEvent(event); 
     return true; 
    } 
} 

Con respecto al ejemplo anterior, si el retorno cierto en onTouch método, me encontré con todos los eventos táctiles (abajo, arriba, mover, etc) ha sido capturado de acuerdo a mi LogView. Por el contrario, si el resultado es falso, solo se ha capturado el evento DOWN. Por lo tanto, parece que el retorno falso evitará que el evento se propague. Estoy en lo correcto ?

Además, en un OnGestureListener, muchos métodos tienen que devolver un valor booleano también. ¿Tienen el mismo significado?

Respuesta

116

Si devuelve true de un evento ACTION_DOWN, está interesado en el resto de los eventos en ese gesto. Un "gesto" en este caso significa todos los eventos hasta el final ACTION_UP o ACTION_CANCEL. Si devuelve false desde ACTION_DOWN, significa que no desea que el evento y otras vistas tengan la oportunidad de manejarlo. Si tiene vistas superpuestas, esta puede ser una vista de hermanos. Si no, se disparará hasta el padre.

+3

adamp, ¿hay alguna manera de seguir recibiendo eventos Y dejar pasar los eventos? – ticofab

+0

@ticofab no, solo un padre de la vista que recibe eventos actualmente puede interceptar eventos futuros en el gesto. (Por supuesto, siempre puedes construir tus propios sistemas de redirección en una vista principal, pero yo no lo recomendaría a menos que realmente sepas lo que estás haciendo.:)) – adamp

+0

@adamp No puedo pensar en el motivo por el que onTouch se llama 2 veces cuando se devuelve verdadero y 1 vez solo cuando devuelvo falso. –

11

El valor booleano determina si el evento se consume o no.

Sí, estás en lo cierto. Si devuelve falso, el siguiente oyente maneja el evento. Si devuelve verdadero, su oyente consume el evento y no lo envía al siguiente método.

+2

Esto es falso. 'verdadero' significa que consumió el evento y quiere el resto de los eventos en el gesto; otros oyentes/vistas no recibirán los eventos. 'falso' significa dejar que otra persona maneje el evento. Sin embargo, en realidad es un poco más específico; ver mi respuesta – adamp

+0

¿Cómo es eso no es exactamente lo que dije? – Falmarri

+0

Lo que dijiste está invertido. :) – adamp

1

Perdí casi un día en la solución de problemas, pero me enteré de que mi función onTouch se llama 2 veces cuando se usa verdadero y 1 vez cuando se usa falso.

+0

¿Podría averiguar el motivo? –

+0

comprueba 'event.getAction()' porque si devuelves 'false' en el evento ACTION_DOWN, el oyente ignorará el evento ACTION_UP – doodeec

0

De Android-document:

Nota: Android llamará a los controladores de eventos primero y luego los controladores por defecto correspondientes a la segunda definición de clase. Como tal, la devolución verdadera de estos detectores de eventos detendrá la propagación del evento a otros detectores de eventos y también bloqueará la devolución de llamada al controlador de eventos predeterminado en la Vista. Así que asegúrese de querer finalizar el evento cuando vuelva verdadero.

Cuestiones relacionadas