Android Abbrechen von Toast beim Beenden der App und wenn Toast angezeigt wird

8

Ich habe über diese Art von Problem hier gelesen, aber die Antworten scheinen nicht zu funktionieren.

Ich zeige Toast , wenn der Benutzer auf eine Schaltfläche klickt. Wenn der Benutzer fortwährend auf die Schaltfläche klickt, wird der Toast immer wieder angezeigt, selbst wenn der Benutzer die Aktivität beendet.

Die Länge des Toasts ist kurz. Die Länge des Toasts kann nicht geändert werden, da der Text lang ist.

Das habe ich ab sofort versucht:

%Vor%

Das hat nicht funktioniert.

Ich habe es versucht:

%Vor%

in onStop() . Aus irgendeinem Grund funktioniert die Abbruchmethode nie.

Wenn ich die .cancel() stelle, bevor ich die App zeige ... dann würde es einen weiteren Null-Check dafür geben. Aber danach hat es auch nicht funktioniert. Ich kann ein Dialogfeld anstelle eines Toasts anzeigen, aber das wäre keine Lösung.

Gibt es eine Möglichkeit zu überprüfen, ob ein Toast angezeigt wird oder nicht?

Als Referenz

Ciff 19.04.2013, 05:57
quelle

4 Antworten

12

Der Trick besteht darin, den letzten angezeigten Toast zu verfolgen und diesen zu löschen.

Ich habe einen Toast -Wrapper erstellt, der einen statischen Verweis auf den letzten angezeigten Toast enthält.

Wenn ich eine neue anzeigen muss, annulliere ich zuerst die statische Referenz, bevor ich die neue zeige (und in der statischen speichern).

Hier ist der vollständige Code des Boast -Wrappers, den ich gemacht habe - er imitiert genug der Toast-Methoden, damit ich ihn benutzen kann. Standardmäßig löscht Boast die vorherige, so dass Sie keine Warteschlange mit Toasten erstellen, die darauf warten, angezeigt zu werden.

Dieser Code kann in meinem Github-Geiste gefunden werden:

Wenn Sie nur wissen möchten, wie Sie die Benachrichtigungen beim Beenden Ihrer App abbrechen können, finden Sie dort viele hilfreiche Informationen. Wenn Sie Verbesserungen oder Vorschläge haben, zögern Sie nicht, das Problem zu lösen und sich mit uns in Verbindung zu setzen. Dies ist eine sehr alte Antwort, aber der Code ist seit einiger Zeit in der Produktion einiger Apps stabil.

BTW - Dies sollte in den meisten Anwendungsfällen ein direkter Drop-in-Ersatz für Toast sein.

%Vor%     
Richard Le Mesurier 19.04.2013, 07:57
quelle
3

Anstatt den Toast zu stornieren. ändere den Text. Zum Beispiel

%Vor%

Wenn Sie einen anderen Toast benötigen, verwenden Sie

%Vor%

Und wenn Sie den Toast ablehnen möchten, rufen Sie einfach t.cancel()

auf     
stinepike 19.04.2013 06:07
quelle
1

Sie können einzelne Toasts abbrechen, indem Sie cancel () für das Toast-Objekt aufrufen. AFAIK, es gibt jedoch keine Möglichkeit, alle ausstehenden Toasts zu stornieren.

    
Imran Ali 19.04.2013 06:03
quelle
-1

Bewahren Sie den Zeitstempel des letzten Toasts auf und lassen Sie keine neuen Toasts zu, bis ein Timeout abgelaufen ist.

Etwas wie:

%Vor%

Ich würde mir keine Sorgen machen, dass ein einzelner Toast für eine Sekunde rumhängt, nachdem der Nutzer die App verlassen hat - das ist ein ziemlich normales Verhalten.

    
Jschools 19.04.2013 06:04
quelle

Tags und Links