Ich verwende Live-Daten in meiner Anwendung für alle Netzwerkanrufe und die Bearbeitung von Antworten.
In einem der Szenarien lädt meine Recycler-Ansicht einige Daten in den Ansichtsinhaber onBind
und die Antwort aktualisiert die Benutzeroberfläche. Dazu muss ich lifecycleOwner
dem Beobachter ein zur Verfügung stellen .
Da die Recycler-Ansicht keinen eigenen Lebenszyklus-Eigentümer hat, verwende ich das übergeordnete Fragment dafür, indem ich es verwende, parentFragment.viewlifecycleOwner
aber irgendwie gibt es einen Fehler aus.
Wie kann ein Ansichtsinhaber seine Instanz haben, wenn das übergeordnete Fragment keine Instanz hat?
viewModel.responseState.observe(parentFragment.viewLifecycleOwner, Observer {
updateUI(it)
})
Schwerwiegende Ausnahme: java.lang.IllegalStateException: Zugriff auf den LifecycleOwner der Fragmentansicht nicht möglich, wenn getView () null ist, dh vor onCreateView () oder nach onDestroyView ()
quelle
Antworten:
Die Lösung für mich wurde vereinfacht. Ich verwende separate Beobachter - einen für das Netzwerk, das Lifecycleowner aus der Hauptaktivität (oder nur aus einer beliebigen Aktivität) verwendet, und einen für die Fragmentansicht (Modellansicht Ansichtsmodell).
quelle
In der Dokumentation zu getViewLifecycleOwner ( ) glaube ich nicht, ich kann es besser erklären:
quelle
Die Lösung besteht, wie Sie kommentieren, darin, sicherzustellen, dass die Ansicht des Fragments nicht null ist. Dies ist mir mit einem Fragment in einem ViewPager passiert.
quelle