¿Alguien sabe, si hay una posibilidad de hacer algo (en mi caso terminar actividad) en el mensaje de brindis se cerrará?¿Finaliza la actividad después de que desaparezca el mensaje de brindis?
Respuesta
Lo haces simplemente creando Thread
que dura mientras se muestra Toast
y luego puedes terminar 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 crear 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();
}
}
};
android.widget.Toast no ofrece ningún oyente para informar cuando haya terminado.
Puede llamar a Toast.getDuration() para saber cuánto durará, y hacer su propio TimerTask para ejecutarse en el momento en que Toast se desvanece y realizar sus tareas allí.
No estoy seguro de que pueda hacer esto con Toasts, sin embargo, puede reemplazar las tostadas por un diálogo simple (y reutilizar el diseño de Toast si lo desea), y luego puede usar métodos como onDetachedFromWindow
para enganchar el cierre de la actividad a la ventana.
Actualmente no hay devoluciones de llamadas cuando se está terminando un Toast
, pero si necesita saber cuándo se cerrará, puede iniciar un hilo de fondo que dormirá unos milisegundos igual a la duración Toast
, y luego ejecuta la operación necesaria. Esta es solo una forma de resolver el problema, estoy seguro de que hay más soluciones. Espero que esto ayude.
Sí, pero esto es una forma truco
Android pan tostado no tiene una forma de establecer una devolución de llamada después de que se terminó.
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 se puede hacer:
- Establecer la tostada
- Establecer un hilo contador basado en el LENGTH_LONG (3,5 s) o LENGTH_SHORT (2s) para cerrar la actividad.
- toast.show() y thread.start();
no hacen suposiciones acerca de los retrasos ! Estos pueden cambiar en diferentes versiones de API. –
Lo sé, pero esa es la única forma de hacer lo que él quiere ahora. –
Quizás tenga razón, getDuration solo devuelve LENGTH_SHORT o LENGTH_LONG, que son constantes 0/1. No es tiempo real en ms. –
Afaik the INotificationManager API (que se utiliza debajo del 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 Toast se muestra u oculta sin usar el reflejo para seleccionar la clase interna que representa la notificación de transitorios.
Llamas a las tostadas, estas terminan usando el Onstop(). Su brindis ahora aparecerá.
Extienda la clase Toast-Class y use su propia devolución de llamada.
hmmm .. algunos detalles más? – Tima
no creo que esta sea una opción ... Toast usa INotificationManager, por lo que no hay forma de notificar a la persona que llama. –
Así es como lo hago ...
Tenga en cuenta que este clase incluye una llamada para cerrar la actividad que lo llamó. Puedes sacar eso si es necesario.
Además, tenga en cuenta que los tiempos de reposo siguen la duración del brindis, pero he agregado un medio segundo extra para dar un pequeño margen antes de que la actividad termine.
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 trozo de código que se parece a esto, 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 lo que su caso de uso es, pero es lo que realmente necesita esperar para el brindis para cerrar para finalizar tu actividad?
En mi caso, tengo una actividad que es un punto de entrada a la aplicación desde una url (lo que permite 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 de una validación, que muestran una tostada y terminar 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 demuestra la tostada y no tener que esperar hasta que ya no está representada antes de llamar acabado(). Inicialmente, pensé que esto no estaba funcionando, pero luego descubrí que era porque olvidé llamar a show() en el brindis.
Primero debe mostrar Toast
luego después de 2 segundos, 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);
acabo de hacer una biblioteca simple para que la "cuestión" 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
}
});
- 1. Finishactivity no finaliza la actividad?
- 2. Android finaliza la actividad y comienza otra
- 3. Android 4.0.3 y finaliza la actividad
- 4. vim - Detener el desplazamiento después del primer archivo que finaliza
- 5. ¿Cómo hacer que la trama no desaparezca?
- 6. ¿Cómo hago un brindis de una clase que no es de actividad?
- 7. La actividad predeterminada de la cámara no finaliza Al presionar el botón Aceptar, presione
- 8. Android: mostrar tostadas después de terminar la aplicación/actividad
- 9. + Rails 3.0.4 finaliza la sesión después de la petición AJAX
- 10. rotar CATransform3D hace que la mitad de la imagen desaparezca
- 11. hacer que el texto div desaparezca después de 5 segundos usando jquery?
- 12. jQuery slideDown en IE9: el contenido desaparece después de que la animación finaliza
- 13. Por qué el mensaje de brindis no se muestra en el sistema operativo Android 4.1 que contiene el móvil
- 14. Establecer brindis Aparecer longitud
- 15. WEPopoverController presentPopoverFromBarButtonItem hace que el UIBarButtonItem especificado desaparezca
- 16. Cancelar un brindis en Android antes de que aparezca
- 17. La actividad continúa después de finalizar();
- 18. Fin de llamada() Después de iniciar una nueva actividad
- 19. ¿Cómo se garantiza que NotifyIcon desaparezca?
- 20. TcpClient o HttpWebRequest al Apple TV que finaliza después de 30 segundos?
- 21. Mostrar el mensaje después de la instalación del paquete
- 22. android - Cómo mostrar el cuadro de diálogo después de que termina la actividad
- 23. Pasar un valor de la actividad al hilo después de que el hilo ya está creado
- 24. Ocultando el teclado después de llamar a una actividad nueva que muestra un ProgressDialog
- 25. Visual Studio 2010 saliendo después del programa finaliza
- 26. Cómo probar la apariencia de un mensaje de Toast
- 27. ¿Cómo liberar la memoria del objeto de actividad real después de salir de la actividad?
- 28. "Error: archivo de mensaje demasiado grande" ¿El límite de recepción o recepción finaliza?
- 29. GLSurfaceView que causa ANR después de que se destruye la actividad
- 30. Volver a cargar la página después de que se muestre el mensaje, jQuery
¡Genial! Thx :) Así que puedes agregar Toast.LENGTH_LONG al método sleep, para tener la coincidencia exacta –
RIP para aquellos que votaron negativamente sin mencionar el motivo :) –