Як вже згадували інші, AndroidViewModelви можете отримати висновок, щоб отримати програму, Contextале з того, що я збираю в коментарях, ви намагаєтесь маніпулювати @drawables з вашогоViewModel що перемагає мету MVVM.
Загалом, потреба мати Contextв собі ViewModelмайже повсюдно наводить на думку, що вам слід подумати про переосмислення того, як ви розподіляєте логіку між своїми Viewі 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 річ, і залежно від тих, хто в ViewModelних, це погана практика: вони заважають модульному тестуванню. З іншого боку, ваші власні інтерфейси компонентів / служб повністю під вашим контролем, тому ви можете легко знущатись над ними для тестування.
AndroidViewModelале отриматиCannot create instance exceptionто ви можете звернутися до цей мій відповідь stackoverflow.com/a/62626408/1055241