Как уже упоминалось, AndroidViewModelвы можете получить приложение, Contextно из того, что я собираю в комментариях, вы пытаетесь манипулировать @drawables изнутри, ViewModelчто побеждает цель MVVM.
В общем, необходимость иметь Contextв вашем ViewModelпочти всегда предполагает, что вам следует подумать о переосмыслении того, как вы разделяете логику между вашими Views и ViewModels.
Вместо того, чтобы ViewModelразрешать чертежи и передавать их в Activity / Fragment, подумайте о том, чтобы Fragment / Activity манипулировал чертежами на основе данных, которыми обладает ViewModel. Скажем, вам нужны разные чертежи, которые будут отображаться в представлении для состояния включения / выключения - это то, ViewModelчто должно содержать (возможно, логическое) состояние, но Viewзадача пользователя - выбрать соответствующий объект для рисования.
С DataBinding это можно сделать довольно просто :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
Если у вас больше состояний и чертежей, чтобы избежать громоздкой логики в файле макета, вы можете написать собственный BindingAdapter, который преобразует, скажем, Enumзначение в R.drawable.*(например, масти карт)
Или, может быть, вам нужен Contextдля какого-то компонента, который вы используете в своем ViewModel- тогда создайте компонент вне ViewModelи передайте его. Вы можете использовать DI или синглтоны, или создать Context-зависимый компонент прямо перед инициализацией ViewModelin Fragment/ Activity.
Зачем беспокоиться: Contextэто специфическая вещь для Android, и зависимость от них в ViewModels - плохая практика: они мешают модульному тестированию. С другой стороны, ваши собственные интерфейсы компонентов / сервисов полностью под вашим контролем, поэтому вы можете легко смоделировать их для тестирования.
AndroidViewModelно получает его,Cannot create instance exceptionвы можете обратиться к моему этому ответу stackoverflow.com/a/62626408/1055241