2011-01-09 10 views
27

¿Hay alguna manera de eliminar un Listener de un View en android? Tengo un Checkbox al que adjunté un CheckChangedListener a. El problema es que al llamar al setChecked(), mi oyente se dispara.Eliminar un oyente de una vista en android

Si no puedo eliminar un oyente, ¿hay alguna manera de evitar que el oyente se dispare cuando llamo manualmente al setChecked() y no se lo comprueba desde un evento táctil?

Respuesta

59

Bueno, encontré la respuesta. Esto no parece estar documentado en ninguna parte, pero revisé el código para la clase View y si pasa null a los métodos setClickListener, eliminará el detector.

checkbox.setOnCheckChangedListener(null); 

Esto debería funcionar para cualquier oyente de eventos.

+1

Id tenga cuidado al hacer uso de funciones no documentadas, pueden cambiar en cualquier momento. –

+4

No llamaría exactamente esto una "función no documentada". Si una vista admite un único oyente de un tipo determinado y establece que ese oyente sea nulo, ¿qué otra cosa esperaría que ocurriera? :) – adamp

+3

No es una característica no documentada. Simplemente no está documentado que es seguro pasar en nulo, que es. El oyente interno que usa la vista comienza como nulo en la construcción y se compara con el valor nulo cuando se determina si enviar el evento. La configuración de null solo lo restablece al valor que es antes de establecer un oyente. – Falmarri

2

Puede intentar configurar el oyente a uno que no haga nada antes de llamar al setChecked() y luego volver a colocar el útil.

5

¿Por qué tiene un checkChangeListener? Si usara un onClicklListener, podría funcionar para usted?

-4

Simplemente utiliza removeListener (esto). ¿Me estoy perdiendo de algo?

+6

La clase View no tiene un método "removeListener" ... – Falmarri

0

He tenido problemas similares con la vista de Spinner. Mi solución fue crear una variable de miembro de clase que verifico en el método OnItemSelected. Antes de cambiar el contenido/selección de Spinner mediante programación, establecí esta variable en true. Cuando OnItemSelected se activa, si la variable es true lo cambio a false y solo return sin hacer ningún trabajo. La desventaja de esto es que dificulta la solución de problemas ya que esta variable se establece en todo mi código.

Cuestiones relacionadas