Cómo detener la serie de controladores postDelayed

Tengo una serie de manejadores postDelayed. Tengo problemas para establecer un mathode que detiene a los manejadores cuando el usuario está tocando en el botón de detener en cualquier momento que él quiere.

Apreciaré cualquier ayuda alguien capaz de proporcionar. Gracias

while (!lessonIsRunning) { Handler handler0 = new Handler(); handler0.postDelayed(new Runnable() { @Override public void run() { plate1.setVisibility(ImageView.VISIBLE); plate2.setVisibility(ImageView.VISIBLE); plate3.setVisibility(ImageView.VISIBLE); } }, 6000); Handler handler1 = new Handler(); handler1.postDelayed(new Runnable() { @Override public void run() { apples1.setVisibility(ImageView.VISIBLE); } }, 9000); Handler handler2 = new Handler(); handler2.postDelayed(new Runnable() { @Override public void run() { plus1.setVisibility(TextView.VISIBLE); } }, 9250); } public void stopLesson(View V){ } 

En lugar de escribir la tarea Runnable de manera anónima debes definirla con un nombre, para que más tarde tengas un enlace a ella para eliminarla:

 //there is no need for multiple handlers //handler must be declared outside all functions, in order for you to use it everywhere. Handler handler = new Handler(); Runnable myFirstTask = new Runnable (){ @Override public void run() { plate1.setVisibility(ImageView.VISIBLE); plate2.setVisibility(ImageView.VISIBLE); plate3.setVisibility(ImageView.VISIBLE); } }; Runnable mySecondTask = new Runnable(){ @Override public void run() { plus1.setVisibility(TextView.VISIBLE); } }; Runnable myThirdTask = new Runnable(){ @Override public void run() { apples1.setVisibility(ImageView.VISIBLE); } } //you can put different tasks on the same handler object while (!lessonIsRunning) { handler.postDelayed(myFirstTask,6000); handler.postDelayed(mySecondTask,9250); handler.postDelayed(myThirdTask,9000); } public void stopLesson(View V){ //notice that you don't need these, because the handlers are not recursive //you don't have lines "handler.postDelayed(sameTask,someTime);" //in your run Method of the runnable if(handler!=null){ handler.removeCallbacks(myFirstTask); handler.removeCallbacks(mySecondTask); handler.removeCallbacks(myThirdTask); //if this method is inside onPause or onDestroy add this line as well: handler=null; } } 

puedes dar

 handler0.removeCallbacksAndMessages(null); handler1.removeCallbacksAndMessages(null); handler2.removeCallbacksAndMessages(null); 

un intento. El documento dice que cuando envía un token nulo se eliminan todas las devoluciones de llamada y el mensaje.

  • ¿Cómo instanciar el servicio android con un constructor?
  • Deserializar el mapa JSON usando Jackson no da el mapa correcto
  • Cómo cambiar el color de resaltado en el campo editText
  • Android Turn-by-Turn API?
  • Pasa parámetro complejo de ksoap Android a WCF Web-Service
  • Cómo convertir los registros de base de datos en archivo csv en android?
  • Añade más espacio entre los elementos de Android Spinner sin estilo personalizado?
  • Cómo dibujar un mapa de bits en la parte superior derecha de la lona
  • Utilice la biblioteca AppCompat para la compatibilidad con ActionBar
  • Lectura y escritura de un archivo desde la tarjeta SD
  • Cómo ejecutar la tarea asíncrona para un tiempo de espera establecido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.