1

AndroidViewModel est utilisé pour accéder au contexte Application. Je suis en train d'accéder à l » FragmentManagerActivity sans passer explicitement:Obtenez FragmentManager dans AndroidViewModel

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

erreur Obtenir, incapable de lancer Context-Activity.


Question: est-il possible d'obtenir FragmentManager l'intérieur AndroidViewModel sans passer explicitement?

Répondre

4

Je pense que la réponse courte sera "non, il n'y a aucun moyen", parce Application contexte est dans aucun conscient de FragmentManager.

FragmentManager est un objet que les sous-classes de FragmentActivity peuvent avoir. Application n'est pas une sous-classe de FragmentActivity.

Une autre question serait, pourquoi auriez-vous besoin d'une instance FragmentManager à l'intérieur de votre ViewModel? La plupart du temps, vous devriez déléguer des tâches liées à la vue à d'autres unités autres que ViewModel (par exemple Activity, Fragment). Gardez à l'esprit, que ce ViewModel serait conservé sur le changement de configuration, donc si vous gardez une référence à la FragmentManager à l'intérieur de votre ViewModel, vous fuirait votre instance Activity.

+0

Oui, c'est un bon point à penser. – Oleg