¿Terminar la actividad después de que el mensaje del pan tostado desaparezca?

¿Alguien sabe, si hay una posibilidad de hacer algo (en mi caso terminar la actividad) en el mensaje de pan tostado será cerrado?

Usted lo hace simplemente creando un Thread que dure mientras el Toast se muestre y entonces usted puede terminar su Activity .

  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // your other stuff Toast.makeText(this,"This is a Toast", Toast.LENGTH_LONG).show(); thread.start(); } 

Ahora cree un hilo que espera (LENGTH_LONG = 3.5) o (LENGTH_SHORT = 2) segundos

  Thread thread = new Thread(){ @Override public void run() { try { Thread.sleep(3500); // As I am using LENGTH_LONG in Toast Your_Activity.this.finish(); } catch (Exception e) { e.printStackTrace(); } } }; 

En primer lugar, debe mostrar Toast después de 2 segundos, se terminará su activity .

 Toast.makeText(YourActivity.this, "MESSAGE", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { YourActivity.this.finish(); } }, 2000); 

Android.widget.Toast no ofrece ningún oyente para informar cuando está terminado.

Puede llamar a Toast.getDuration () para saber cuánto tiempo durará, y hacer que su propio TimerTask se ejecute en el momento en que Toast se desvanece y realizar sus tareas allí.

Sí, pero este es un truco

Android Toast no tiene una forma de establecer una devolución de llamada después de haber terminado.

Así que lo que puede hacer se basa en este hecho

 private static final int LONG_DELAY = 3500; // 3.5 seconds private static final int SHORT_DELAY = 2000; // 2 seconds 

Ahora usted puede hacer:

  1. Configurar el brindis
  2. Configure un hilo de contador basado en LENGTH_LONG (3.5s) o LENGTH_SHORT (2s) para cerrar la actividad.
  3. Toast.show () y thread.start ();

En realidad, no hay devoluciones de llamada cuando se está finalizando un Toast , pero si necesita saberlo, cuándo se cerrará, podrá iniciar un subproceso de fondo que durará varios milisegundos igual a la duración de Toast y luego ejecutará la operación necesaria . Esta es sólo una manera de resolver el problema, estoy seguro de que hay más soluciones. Espero que esto ayude.

Así es como lo hago …

Tenga en cuenta que esta clase incluye una llamada para cerrar la actividad que lo llamó. Puede sacar eso si es necesario.

Además, tenga en cuenta que los tiempos de sueño rastrean la duración de la tostada, pero he añadido un medio segundo adicional para dar un poco de margen antes de que termine la actividad.

 public class Toaster implements Runnable { Context theContext; CharSequence theMessage; int theDuration; Activity theActivity; public Toaster( Activity a, Context c, CharSequence s, int i ) { theActivity = a; theContext = c; theMessage = s; theDuration = i; } @Override public void run() { Toast toast = Toast.makeText(theContext, theMessage, theDuration ); toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 0, 0); toast.show(); Thread t = new Thread( new Runnable() { @Override public void run() { try { Thread.sleep(theDuration == Toast.LENGTH_SHORT ? 2500 : 4000); } catch (InterruptedException e) { e.printStackTrace(); } theActivity.finish(); } }); t.start(); } } 

En la actividad, hay un pedazo de código que se parece a esto, para llamarlo:

  Context c = getApplicationContext(); CharSequence msg = "Form Data Submitted!"; int duration = Toast.LENGTH_SHORT; runOnUiThread( new Toaster(this, c, msg, duration) ); 

No estoy seguro de que puedas hacer esto con Toasts, sin embargo, puedes reemplazar el brindis por un simple diálogo (y reutilizar el diseño de Toast si lo deseas), y luego puedes usar métodos como onDetachedFromWindow para conectar el cierre de la actividad A la ventana.

Acabo de hacer una biblioteca simple para ese "problema" Descargar:

https://github.com/mkiisoft/Toaster

Y usarlo de esta manera:

 Toaster.getInstance().makeText(context, "your custom message", Toast.LENGTH_SHORT, new OnToasterFinish() { @Override public void finish() { // Your code over here after the Toast } }); 

Afaik el INotificationManager API (que se utiliza bajo el capó de la clase de brindis) no tiene ningún soporte para notificar a la persona que llama cuando cierra el Toast.

Tampoco hay forma de comprobar si el Toast está mostrando u oculto sin utilizar la reflexión para seleccionar la clase interna que representa la notificación transitoria.

Llamas a la tostada y terminas usando la tecla Onstop (). Tu brindis aparecerá ahora.

Extienda la clase Toast y utilice su propia devolución de llamada.

No estoy seguro de cuál es su caso de uso, pero ¿realmente necesita esperar a que el brindis termine para terminar su actividad?

En mi caso, tengo una actividad que es un punto de entrada en la aplicación desde una url (permitiendo que la aplicación se abra desde un enlace en un correo electrónico o en una página web). Si la url no pasa un cheque de validación, muestro un brindis y termino la actividad:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... if (!validateUrl()) { Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_LONG).show(); finish(); return; } ... } 

Esto muestra el brindis y no tengo que esperar hasta que ya no se muestra antes de llamar a finish (). Inicialmente, pensé que esto no funcionaba, pero luego descubrí que era porque me olvidé de llamar a show () en la tostada!

  • Valor siempre devuelve 0 donde debe devolver el número de fila insertada
  • ¿Cómo puedo mostrar un brindis por una duración específica?
  • Visualización de un mensaje Toast de la clase Application
  • Android: crea un brindis anclado en una vista
  • ¿Cómo hago un brindis de una clase que no es de actividad?
  • Shared Toast no se muestra en Android 3.0.1 en Motorola Xoom
  • Establecer Toast Aparecer Longitud
  • Problema con Toast en llamada AsyncTask método
  • Cómo establecer el tiempo de visualización de Toast menos de Toast.LENGTH_SHORT
  • Contabilización del mensaje Toast de un hilo
  • Abrir PDF en un WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.