0

Ich implementiere Android Architecture Components. Stellen Sie sich einen Fall wie den folgenden vor, in dem Ihr Fragment einen LiveData beobachtet, um seine Benutzeroberfläche zu ändern. Benutzer minimiert die App und der Status wird geändert (in meinem Fall aus dem Repository). So wird die Observer aus der Fragment nicht mit einer Änderung ausgelöst, weil die Fragment nicht sichtbar ist. Wenn der Benutzer jedoch zur App zurückkehrt, wird der neue Status nicht ausgelöst. Wenn der Status erneut geändert wird (während Fragment sichtbar ist), erhält die Observer die Änderung. Können Sie eine Aktualisierung erzwingen, wenn das Fragment wieder sichtbar ist?Erzwinge LiveData Observer in einem Fragment, um eine Änderung zu erhalten, nachdem es wieder sichtbar wird?

override fun onActivityCreated(savedInstanceState: Bundle?) { 
    super.onActivityCreated(savedInstanceState) 

    vm = ViewModelProviders.of(this, viewModelFactory).get(MyViewModel::class.java) 
    vm.getStatus()?.observe(this, Observer<MyRepository.Status> { status -> 
     if (status != null) { 
      when (status) { 
       NONE -> setNoneUI() 
       LOADING -> setLoadingUI() 
       CONTENT -> setContentUI() 
       ERROR -> setErrorUI() 
      } 
     } 
    }) 
} 

Antwort

1

Eigentlich Ihre Aktivität sollte auf den neuesten Stand von LiveData erhalten, wenn es wieder sichtbar ist, wie in diesen video und beschrieben here erklärt:

Daten immer auf den neuesten Stand: Wenn ein Lebenszyklus inaktiv wird, Es empfängt die neuesten Daten, wenn es wieder aktiv wird. Beispiel: Eine Aktivität im Hintergrund empfängt die neuesten Daten direkt nach dem Zurückkehren zum Vordergrund .

Ich habe es gerade in meiner eigenen Anwendung getestet, funktioniert wie beschrieben. Daher muss in Ihrer Anwendung ein weiterer Fehler auftreten: Setzen Sie die LiveData korrekt aus Ihrer Repository-Klasse? Vielleicht ein anderer Thread/postValue Problem?

Verwandte Themen