Laut LiveData-Dokumentation :
Die LiveData-Klasse bietet die folgenden Vorteile:
...
Immer aktuelle Daten: Wenn ein Lebenszyklus erneut beginnt (z. B. wenn eine Aktivität vom Backstack in den gestarteten Status zurückkehrt), erhält sie die neuesten Standortdaten (falls dies nicht bereits geschehen ist).
Aber manchmal brauche ich diese Funktion nicht.
Zum Beispiel habe ich folgende LiveData in ViewModel und Observer in Activity:
%Vor%Nun erscheint nach jeder Drehung der alte Dialog.
Gibt es eine Möglichkeit, den gespeicherten Wert zu löschen, nachdem er gehandhabt wurde oder ist die Verwendung von LiveData überhaupt falsch?
Alex 'Antwort in den Kommentaren ist genau das, wonach du suchst. Es gibt Beispielcode für eine Klasse namens SingleLiveEvent . Der Zweck dieser Klasse wird wie folgt beschrieben:
Eine lebenszyklusbewusste Observable, die nur neue Updates sendet Abonnement, das für Ereignisse wie Navigation und Snackbar-Nachrichten verwendet wird.
Dies vermeidet ein häufiges Problem mit Ereignissen: bei Konfigurationsänderungen (wie Rotation) kann eine Aktualisierung ausgegeben werden, wenn der Beobachter aktiv ist. Diese LiveData ruft das Observable nur dann auf, wenn ein expliziter Aufruf an setValue () oder call ().
Ich bin mir nicht sicher, ob es in Ihrem Fall funktioniert, aber in meinem Fall (Erhöhen / Verringern der Objektmenge in Raum durch Klicken auf Ansichten) Entferne Beobachter und überprüfe, ob es aktive Beobachter gibt, lass mich die Arbeit machen:
%Vor%Tags und Links android android-architecture-components android-livedata