1

AndroidViewModel wird verwendet, um auf Application Kontext zuzugreifen. Ich versuche Activity ‚s FragmentManager ohne darauf zuzugreifen vorbei ausdrücklich:Get FragmentManager in AndroidViewModel

class FooViewModel(app: Application) : AndroidViewModel(app) { 
    private val fm = (app.applicationContext as Activity).fragmentManager 
    .. 
} 

Erste Fehler, nicht in der Lage Context-Activity zu werfen.


Frage: Gibt es eine Möglichkeit FragmentManager innerhalb AndroidViewModel ohne es ausdrücklich zu erhalten vorbei?

Antwort

4

Ich denke, kurze Antwort wird sein "Nein, es gibt keine Möglichkeit", weil Application Kontext in keine Kenntnis von FragmentManager ist.

FragmentManager ist ein Objekt, das Unterklassen von FragmentActivity haben können. Application ist keine Unterklasse von FragmentActivity. Eine andere Frage wäre, warum würden Sie jemals eine FragmentManager Instanz in Ihrem ViewModel benötigen? Höchstwahrscheinlich sollten Sie mit der Ansicht zusammenhängende Daten an andere Einheiten als ViewModel delegieren (z. B. Activity, Fragment). Denken Sie daran, dass diese ViewModel über Konfigurationsänderung beibehalten werden würde. Wenn Sie also einen Verweis auf die FragmentManager innerhalb Ihrer ViewModel behalten, würden Sie Ihre Activity Instanz verlieren.

+0

Ja, das ist ein guter Punkt zum Nachdenken. – Oleg

Verwandte Themen