Wie lösche ich LiveData gespeicherte Werte?

10

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?

    
Kamer358 16.06.2017, 06:14
quelle

2 Antworten

15

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 ().

    
Lyla 30.06.2017, 02:55
quelle
0

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%     
Jurij Pitulja 30.03.2018 12:17
quelle