2011-03-22 11 views
6

He visto una serie de preguntas sobre la cancelación de pan tostado. Ninguno de ellos está funcionando.Toast personalizado Cancelar no funciona

Tengo un Toast personalizado. El código para eso es todos menos una línea igual que http://developer.android.com/guide/topics/ui/notifiers/toasts.html#CustomToastView

La diferencia es la siguiente.

  1. La variable tostadas se define como una clase variable de
  2. todo el código Java está escrito en un método.
  3. Al comienzo de este método, he agregado la siguiente línea para cancelar las tostadas.

    if (toast!=null){ 
        toast.cancel(); 
    } 
    

El método se llama cuando el usuario selecciona (onClick) la vista/diseño. El problema es cuando el usuario selecciona algunas veces, la tostada se pondrá en cola (el toast.cancel no está funcionando).

¿Alguna solución?

[update] Intenté hacer que toast object sea una variable estática. Todavía no funciona.

+0

¿Ha comprobado que toast.cancel realidad se está llamando? Si nunca asigna tostadas, las tostadas serán nulas y nunca se invocará tostadas.cancelas(). –

+0

@ Mike-dg Sí. Revisé el depurador y el código está llegando allí. Sin embargo, toast.cancel() no tiene ningún efecto para el brindis. [actualización] comprobado nuevamente con el mensaje de registro.Sí, definitivamente está llegando dentro de la declaración if. – GSree

+0

Posible duplicado de [Android cancela Toast al salir de la aplicación y cuando se muestra la tostada] (http://stackoverflow.com/questions/16098151/android-cancel-toast-when-exiting-the-app-and-when- toast-is-being-being) –

Respuesta

2

Al final, he creado un cuadro de diálogo personalizado para que el usuario es bloqueado de hacer cualquier otra cosa (y evita que aparezcan tostadas múltiples). Se agregó un evento OnClick Listener para cerrar el diálogo cuando el usuario hace clic en el mismo.

Triste que Toast.cancel() no funciona.

+0

'Toast.cancel()' funciona completamente - verifique [respuesta relacionada con la muestra Github gist] (http://stackoverflow.com/questions/16098151/android-cancel-toast-when-exiting-the-app-and-when -toast-is-being-being) –

0

en el código de toast.setDuration(Toast.LENGTH_LONG); en que el uso de u toast.setDuration(Toast.LENGTH_SHORT); o SE el time.Toast particular está automatically.we cancelada no se puede cancelar

+1

Bueno ... Toast.LENGTH_SHORT reducirá el tiempo. Pero eso no está ayudando al problema. No quiero que sea demasiado pequeño para que el usuario no pueda ver el mensaje. En la documentación de Toast, hay un método cancel(). No estoy seguro de por qué eso no está funcionando. – GSree

7

Sufrí el mismo problema (tostadas personalizadas haciendo cola) y encontré una solución. Funcionó bien en mi caso.

Objeto tostado personalizado initially set to null.

  • Si esto es nulo, cree un nuevo objeto de brindis personalizado con "nuevo".

  • En la medida en que se encuentre en la misma actividad, no haga "nuevo" para crear un objeto nuevo. En cambio, usa ese objeto. Dado que setText() no funcionará en este caso, use setView() como lo hace con su tostada personalizada.

  • Con esta forma show(), cancel(), show(), cancel() funcionó exactamente como esperaba. Sin demoras, sin cola.

Espero que esto ayude.

+1

sus soluciones correctas. Gracias. – JohnRaja

+0

@JohnRaja, es un placer. – Tomcat

-1

Usar este código para un texto personalizado:

LayoutInflater mInflater=LayoutInflater.from(context); 
View view=mInflater.inflate(R.layout.tost_layout,null); 
Toast toast=new Toast(this); 
toast.setView(view); 
toast.show(); 
Cuestiones relacionadas