Ich habe einen gemeinsamen "myToast" verwendet, den ich "myToast.cancel(); vor dem Ausgeben eines neuen Toast verwenden. Für Android v2.3 und älter funktioniert das großartig. Wenn a neuer Toast muss gesendet werden, der alte, wenn er noch auf dem Bildschirm ist, wird abgebrochen (und verschwindet sofort), um durch den neuen Toast ersetzt zu werden.Dies vermeidet das Stapeln von einer Reihe von Toasts, wenn der Benutzer eine Taste mehrmals drückt die Warnung (und andere Bedingungen) Mein aktueller Fall ist ein Toast erscheint, wenn eine falsche Taste gedrückt wird, und ein anderes erscheint, wenn die Clear-Taste nicht gedrückt wirdSo verhindern Sie mehrere Toast-Überlappungen
Für Android 4.0 und 4.1, ein myToast.cancel() ausgeben vor dem nächsten Toast werden sowohl der aktuelle als auch der nächste Toast beendet, die aktuelle cancel() API zeigt an, dass der aktuelle UND der nächste Toast abgebrochen wird (was ziemlich blöd aussieht). Warum einen Toast abbrechen, den du aufstellen willst?
Irgendwelche Ideen, wie Abbruch funktioniert über Android-Versionen (und die Art, wie es in v2.3 und älter funktioniert) einheitlich?
Ich werde versuchen, einige unelegante Dual-Toast-System mit Tracking für die Toast verwendet wird, aber es scheint so ein Schmerz um dieses schlechte Verhalten in 4.x zu arbeiten, was perfekt und logisch in älteren Android-Versionen funktioniert.
Ok, ich habe es gelöst, aber es ist nicht annähernd so sauber, wie ich es mir gewünscht hätte. Ich habe einen Dual-Toast-Ansatz implementiert, bei dem es zwischen zwei Toasts wechselt. Zuerst definieren wir den Toast für die Aktivität vor der OnCreate:
Toast toast0;
Toast toast1;
private static boolean lastToast0 = true;
Im OnCreate:
toast0 = new Toast(getApplicationContext());
toast0.cancel();
toast1 = new Toast(getApplicationContext());
toast1.cancel();
Und schließlich, wenn ich brauche den Toast zu führen und den vor Toast zugleich kündigen ich verwende etwas ähnliches wie:
if (lastToast0) {
toast0.cancel();
toast1.setDuration(Toast.LENGTH_LONG);
toast1.setText("new message");
toast1.show();
lastToast0 = false;
} else {
toast1.cancel();
toast0.setDuration(Toast.LENGTH_LONG);
toast0.setText("new message");
toast0.show();
lastToast0 = true;
}
Wenn Sie müssen nur einen vorhandenen Toast kündigen (bevor es mal aus) verwenden:
toast0.cancel();
toast1.cancel();
Getestet auf Nexus 7 (4.1), Emulator 4.0 und mehreren Geräten mit Android 2.2, 2.3.
Wie stornieren Sie den alten Toast? Vor oder nach dem Erstellen des neuen? – TheZ
Können Sie Ihren Code dort posten, wo Sie gerade anstoßen? – Ralgha
Ich habe es vor dem neuen abgebrochen - deshalb ist es so seltsam, dass Android 4.x das neue verbirgt (aber die API zum Toast-Abbrechen erklärt, dass das passieren wird). Ich habe es in einer von mir erstellten Lösung bearbeitet, die funktioniert. Einfach nicht sehr gut aussehend. – Frank