Ich versuche, die neuen Architekturkomponenten in Android zu verwenden, und bisher hat es ziemlich gut funktioniert. Ich bin jedoch auf ein architektonisches Problem gestoßen.Android Architektur Komponenten ViewModel Kontext Problem
Ich habe eine MainActivity
die eine Reihe von Fragmenten beherbergt, A
, B
und C
. Bis jetzt, jedes Mal, wenn ich mein ViewModel (VM) brauche, hole ich es im Kontext von MainActivity
(so: MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
). Betrachten wir nun das:
- Fragment
C
kann der Benutzer einen Wert aus, und schreibt sie in denVM
. - Fragment
A
verwendet FragmentC
, damit der Benutzer den Wert auswählt, und dannA
liest den Wert direkt vonVM
und zeigt es in seiner Benutzeroberfläche an. - Fragment
B
verwendet den gleichen Ansatz wie FragmentA
.
Das Problem ist, dass, da die VM
immer im Kontext der MainActivity
ist, wenn Fragment A
hat vor B
verwendet wurde, noch der Wert verfügbar sein wird, und B
wird einige alten Daten zeigen.
Die offensichtlichste Lösung, die ich sehe, ist das Erstellen der VM
in den Kontexten der Fragmente A
bzw. B
. Aber dann kann ich nicht herausfinden, wie man C
auf diese VM
s fragment lassen lassen.
konnte ich die VM
im Rahmen des Fragments schaffen auch C
, aber das würde Fragmente A
und B
erfordern eine Instanz von C
zu schaffen, das glaube ich nicht eine schöne Lösung.
Eine dritte Lösung wäre, den aktuellen Ansatz beizubehalten und die Daten in der VM
wenn angemessen zu löschen, aber das ist auch chaotisch, denke ich.
Was ist der beste Weg, dies zu tun?
Solch eine einfache Lösung - danke! –