Ich habe einen Schalter zwischen zwei Staaten, die beim Klicken zeigt eine Snackbar mit dem aktuellen Zustand. Wenn ein Benutzer den Status schnell zurück schaltet, werden möglicherweise eine Vielzahl von Imbissbuden in die Warteschlange gestellt, die nacheinander auftauchen, wobei jeder der Zustände angezeigt wird, während der andere aktiv sein kann. Dies könnte den Benutzer verwirren, also dachte ich mir, ich würde die Snackbar des anderen Staates bei der Erstellung eines neuen ignorieren.Detect Snackbar entlassen werden (nicht onDimissed)
Um dies zu erreichen, rufe ich die alte Snackbar dismiss()
Methode. Es gibt ein Problem damit: Wenn ich den Zustand umschalte, dh wenn ich die alte Snackbar, während die alte Snackbar bereits in ihrer Entlassungsanimation war, zwingt die Aufforderung die Animation neu zu starten, wodurch ein grafischer Fehler entsteht (der fast entlassene alte Snackbar wird zurückgewiesen). Beachten Sie, dass die Ablehnungsanimation der alten Snackbar von mir selbst ausgelöst werden kann (dismiss()
) oder vom System (nach Timeout).
Eine Lösung wäre es, zu erkennen, dass eine Snackbar gerade entlassen wird. Es gibt die Snackbar.Callback
Klasse onDismissed()
Methode, aber diese Methode wird nur nach die Kündigung Animation beendet. Ich möchte die Snackbar vor oder während die Entlassung zu erkennen. Die boolesche Methode isShown()
der Klasse BaseTransientBottomBar
nützt auch nichts: Die Snackbar wird bis zum Ende der Kündigung angezeigt.
Ich habe auch versucht, die Snackbar View
und fügen Sie eine OnLayoutChangeListener
, aber das hört nur auf die Schaffung der Snackbar und wird nicht auf Entlassung verwendet.
Wie kann ich eine Snackbar entdecken, die gerade entlassen wird?
Dies wird eine snackbar noch entlassen erkennen, nachdem ich 'entlassen nennen()', das ein Teil des Problems ist. Ein anderes Problem ist eine Kündigung, die vom System nach einer spontanen Zeitüberschreitung ausgelöst wird. In diesem Fall rufe ich nicht 'disney()' auf der alten Snackbar auf, aber das System tut es. Was ist schön, dass ich weiß wann, weil ich die Dauer der Snackbar angeben kann. Mit diesen Informationen könnte Ihre Antwort auf jede Snackbar ausgedehnt werden. Es kann sogar möglich sein, 'disney()' zu überschreiben, um diese Überprüfung einzuschließen, aber ich weiß es nicht genau, da ich es jetzt nicht überprüfen kann. Ich habe das bearbeitet, um das zu klären. – Erik