Usando una excelente respuesta de Madur arriba, extendió esta en una clase que hacer frente a diferentes tipos de mensajes:
public class ToastManager {
private Toast toastWarningMessage;
private Toast toastAddMessage;
...
public void messageWarning(Context context, String message) {
if(toastWarningMessage == null) {
toastWarningMessage = Toast.makeText(context, message, Toast.LENGTH_SHORT);
} else {
toastWarningMessage.cancel();
toastWarningMessage.setText(message);
}
toastWarningMessage.show();
}
public void messageAdd(Context context, String message) {
if(toastAddMessage == null) {
toastAddMessage = Toast.makeText(context, message, Toast.LENGTH_SHORT);
} else {
toastAddMessage.cancel();
toastAddMessage.setText(message);
}
toastAddMessage.show();
}
...
}
Y esto se llama desde dentro de mi actividad principal:
ToastManager toastManager;
...
private void toastWarningMessage(String message) {
if(toastManager == null) toastManager = new ToastManager();
toastManager.messageWarning(this, message);
}
La razón para clasificar los mensajes es asegurarse de que no se sobrescriban los mensajes importantes. Esta solución parece fácil de reutilizar, ya que solo implica el cambio de nombre de los nombres de las funciones de Toasts.
Cuando el usuario espacia el botón, el pan tostado se cancelará cada vez para el mismo tipo de mensaje. El único problema es si el usuario puede enviar una combinación de mensajes. Esto lleva al primer mensaje que se repite y una vez que caduca, los otros mensajes que aparecen una vez cada uno. No es realmente un gran problema, pero hay que tenerlo en cuenta.
No he analizado las posibles desventajas de tener varias instancias de Toast.
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-shown) –