Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo quitar un runnable de un objeto manejador añadido por postDelayed?

Tengo una animación "abierta" y estoy usando Handler.postDelayed(Runnable, delay) para activar una animación "close" después de un breve retraso. Sin embargo, durante el tiempo entre abrir y cerrar, es posible que otra animación desencadenada por un clic.

Mi pregunta es, ¿cómo puedo cancelar la animación "close" en el controlador?

4 Solutions collect form web for “Cómo quitar un runnable de un objeto manejador añadido por postDelayed?”

Simplemente utilice el removeCallbacks(Runnable r) .

La respuesta de Cristian es correcta, pero en contraposición a lo que se dice en los comentarios de la respuesta, en realidad puede eliminar las devoluciones de llamada para Runnables anónimos llamando a removeCallbacksAndMessages(null);

Como se indica aquí :

Elimine todos los mensajes pendientes de devoluciones de llamada y mensajes enviados cuyo obj es token. Si token es nulo, se eliminarán todos los callbacks y mensajes .

Si está usando la recursión, puede lograr esto pasando "esto". Vea el código abajo.

 public void countDown(final int c){ mHandler.postDelayed(new Runnable() { @Override public void run() { aq.id(R.id.timer).text((c-1)+""); if(c <= 1){ aq.id(R.id.timer).gone(); mHandler.removeCallbacks(this); }else{ countDown(c-1); } } }, 1000); } 

Este ejemplo establecerá el texto de un TextView (temporizador) cada segundo, contando hacia abajo. Una vez que llegue a 0, eliminará el TextView de la interfaz de usuario y desactivará la cuenta regresiva. Esto sólo es útil para alguien que está usando la recursión, pero he llegado aquí buscando eso, así que estoy publicando mis resultados.

Esta es una respuesta tardía, pero aquí hay un método diferente para cuando sólo desea eliminar una categoría específica de runnables del manejador (es decir, en el caso de OP, simplemente quite la animación de cierre, dejando otros ejecutables en la cola):

  int firstToken = 5; int secondToken = 6; //r1 to r4 are all different instances or implementations of Runnable. mHandler.postAtTime(r1, firstToken, 0); mHandler.postAtTime(r2, firstToken, 0); mHandler.postAtTime(r3, secondToken, 0); mHandler.removeCallbacksAndMessages(firstToken); mHandler.postAtTime(r4, firstToken, 0); 

El código anterior ejecutará "r3" y luego "r4" solamente. Esto le permite eliminar una categoría específica de runnables definidos por su token, sin necesidad de mantener ninguna referencia a los propios runnables.

Nota: el código fuente compara los tokens usando el operando "==" solamente (no llama .equals ()), así que mejor usar ints / Integers en lugar de strings para el token.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.