2010-09-20 13 views
89

In Android, la maggior parte dei metodi listener di eventi restituiscono un valore booleano. Cosa significa quel valore vero/falso? cosa comporterà negli eventi di sottosuccessione?Significato del valore booleano restituito da un metodo di gestione degli eventi in Android

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

Per quanto riguarda l'esempio di cui sopra, se il ritorno vero in onTouch metodo, ho trovato ogni tocco evento (giù, su, SPOSTA, ecc) è stato catturato, secondo il mio LogView. Al contrario, se restituisce false, è stato catturato un evento DOWN. Quindi sembra che return false impedirà la propagazione dell'evento. Ho ragione ?

Inoltre, in un OnGestureListener, molti metodi devono restituire anche un valore booleano. Hanno lo stesso significato?

risposta

116

Se si restituisce true da un evento ACTION_DOWN, si è interessati al resto degli eventi in quel gesto. Un "gesto" in questo caso indica tutti gli eventi fino all'ultimo ACTION_UP o ACTION_CANCEL. Restituire false da un ACTION_DOWN significa che non si desidera che l'evento e altre visualizzazioni abbiano l'opportunità di gestirlo. Se si hanno viste sovrapposte, questa può essere vista fratelli. In caso contrario, salirà in bolla al genitore.

+3

adamp, c'è un modo per continuare a ricevere eventi e far passare gli eventi? – ticofab

+0

no, solo un genitore della vista che sta attualmente ricevendo eventi può intercettare gli eventi futuri nel gesto. (Naturalmente, puoi sempre creare i tuoi sistemi di reindirizzamento in una visualizzazione genitore, ma non lo consiglierei a meno che tu non sappia davvero cosa stai facendo.:)) – adamp

+0

@adamp Non riesco a pensare al motivo per cui onTouch viene chiamato 2 volte quando restituisce true e 1 volta solo quando restituisco false. –

11

Il valore booleano determina se l'evento è stato consumato o meno.

Sì, hai ragione. Se si restituisce false, l'ascoltatore successivo gestisce l'evento. Se restituisce true, l'evento viene consumato dal listener e non inviato al metodo successivo.

+2

Questo è falso. 'true' significa che hai consumato l'evento e desideri il resto degli eventi nel gesto: altri ascoltatori/visualizzazioni non riceveranno gli eventi. 'false' significa consentire a qualcun altro di gestire l'evento. In realtà è un po 'più specifico di quello; guarda la mia risposta – adamp

+0

Com'è che non è esattamente quello che ho detto? – Falmarri

+0

Quello che hai detto è invertito. :) – adamp

1

Ho perso quasi un giorno in risoluzione dei problemi, ancora ho scoperto, che la mia funzione onTouch è chiamata 2 volte quando si utilizza true e 1 volte quando si utilizza false.

+0

Potresti scoprire il motivo? –

+0

controlla 'event.getAction()' perché se restituisci 'false' sull'evento ACTION_DOWN, l'evento ACTION_UP viene ignorato dal listener – doodeec

0

Da Android-document:

Nota: Android chiamerà gestori di eventi prima e poi i gestori predefiniti appropriati dalla seconda definizione della classe. Di conseguenza, la restituzione di true da questi listener di eventi interromperà la propagazione dell'evento ad altri listener di eventi e bloccherà anche la richiamata al gestore di eventi predefinito nella vista. Quindi assicurati di voler terminare l'evento quando ritorni vero.

Problemi correlati