Come altri hanno già detto, c'è da AndroidViewModelcui puoi derivare per ottenere l'app, Contextma da quello che raccolgo nei commenti, stai cercando di manipolare @drawablei messaggi di posta elettronica dall'interno del tuo ViewModelche sconfigge lo scopo MVVM.
In generale, la necessità di avere una Contextnella vostra ViewModelsuggerisce quasi universalmente si dovrebbe considerare ripensare come si divide la logica tra le Views e ViewModels.
Invece di dover ViewModelrisolvere i drawable e fornirli all'attività / frammento, considera che il frammento / attività manipoli i drawables in base ai dati posseduti dal file ViewModel. Supponiamo che tu abbia bisogno di diversi drawable da visualizzare in una vista per lo stato on / off - è lo stato ViewModelche dovrebbe contenere lo stato (probabilmente booleano) ma è Viewcompito di selezionare il drawable di conseguenza.
Può essere fatto abbastanza facilmente con DataBinding :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
Se hai più stati e drawables, per evitare logiche ingombranti nel file di layout puoi scrivere un BindingAdapter personalizzato che traduca, ad esempio, un Enumvalore in R.drawable.*(ad esempio semi di carte)
O forse hai bisogno Contextdi qualche componente che usi all'interno del tuo ViewModel- quindi, crea il componente all'esterno di ViewModele passalo dentro. Puoi usare DI, o singleton, o creare il Contextcomponente -dependent subito prima di inizializzare l' ViewModelin Fragment/ Activity.
Perché preoccuparsi: Contextè una cosa specifica di Android e dipendere da quelli in ViewModels è una cattiva pratica: ostacolano i test unitari. D'altra parte, le interfacce dei tuoi componenti / servizi sono completamente sotto il tuo controllo, quindi puoi facilmente deriderle per i test.
AndroidViewModelma ottenereCannot create instance exceptionallora si può fare riferimento alla mia questa risposta stackoverflow.com/a/62626408/1055241