Comme d'autres l'ont mentionné, AndroidViewModelvous pouvez dériver pour obtenir l'application, Contextmais d'après ce que je comprends dans les commentaires, vous essayez de manipuler les @drawables depuis votre intérieur, ViewModelce qui va à l'encontre de l'objectif MVVM.
En général, la nécessité d'avoir un Contextdans votre ViewModelpresque universellement suggère que vous devriez envisager de repenser la façon dont vous divisez la logique entre votre Views et ViewModels.
Au lieu de ViewModelrésoudre les drawables et de les alimenter dans l'activité / le fragment, envisagez de demander au fragment / activité de jongler avec les drawables en fonction des données possédées par le ViewModel. Disons que vous avez besoin de différents drawables pour être affichés dans une vue pour un état activé / désactivé - c'est celui ViewModelqui doit contenir l'état (probablement booléen) mais c'est Viewà lui de sélectionner le dessinable en conséquence.
Cela peut être fait assez facilement avec DataBinding :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
Si vous avez plus d'états et de dessinables, pour éviter une logique lourde dans le fichier de mise en page, vous pouvez écrire un BindingAdapter personnalisé qui traduit, par exemple, une Enumvaleur en R.drawable.*(par exemple, des combinaisons de cartes)
Ou peut-être avez-vous besoin du Contextpour un composant que vous utilisez dans votre ViewModel- puis, créez le composant en dehors de ViewModelet transmettez-le. Vous pouvez utiliser DI, ou des singletons, ou créer le Contextcomposant -dépendant juste avant d'initialiser le ViewModelin Fragment/ Activity.
Pourquoi s'embêter: Contextc'est une chose spécifique à Android, et en fonction de ceux de ViewModels est une mauvaise pratique: ils font obstacle aux tests unitaires. D'autre part, vos propres interfaces composant / service sont entièrement sous votre contrôle, vous pouvez donc facilement les simuler pour les tester.
AndroidViewModelmais obtenant,Cannot create instance exceptionvous pouvez vous référer à ma réponse stackoverflow.com/a/62626408/1055241