Seperti yang telah disebutkan orang lain, ada AndroidViewModelyang dapat Anda peroleh dari untuk mendapatkan aplikasi Contexttetapi dari apa yang saya kumpulkan di komentar, Anda mencoba memanipulasi @drawabledari dalam Anda ViewModelyang mengalahkan tujuan MVVM.
Secara umum, kebutuhan untuk memiliki a Contextdalam Anda ViewModelhampir secara universal menyarankan agar Anda mempertimbangkan untuk memikirkan kembali bagaimana Anda membagi logika antara Views dan ViewModels.
Daripada ViewModelmenyelesaikan drawable dan memasukkannya ke Aktivitas / Fragmen, pertimbangkan untuk meminta Fragmen / Aktivitas menyulap drawable berdasarkan data yang dimiliki oleh ViewModel. Misalnya, Anda memerlukan drawable yang berbeda untuk ditampilkan dalam tampilan untuk status aktif / nonaktif - inilah ViewModelyang harus menahan status (mungkin boolean), tetapi Viewtugasnya adalah untuk memilih drawable yang sesuai.
Ini dapat dilakukan dengan cukup mudah dengan DataBinding :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
Jika Anda memiliki lebih banyak status dan sumber daya dapat digambar, untuk menghindari logika yang tidak berguna dalam file tata letak, Anda dapat menulis BindingAdapter khusus yang menerjemahkan, katakanlah, sebuah Enumnilai ke dalam R.drawable.*(mis. Setelan kartu)
Atau mungkin Anda memerlukan Contextuntuk beberapa komponen yang Anda gunakan di dalam Anda ViewModel- kemudian, buat komponen di luar ViewModeldan kirimkan. Anda dapat menggunakan DI, atau singletons, atau membuat Contextkomponen -dependen tepat sebelum inisialisasi ViewModelin Fragment/ Activity.
Mengapa repot: Contextadalah hal khusus Android, dan bergantung pada mereka ViewModeladalah praktik yang buruk: mereka menghalangi pengujian unit. Di sisi lain, komponen / antarmuka layanan Anda sendiri sepenuhnya di bawah kendali Anda sehingga Anda dapat dengan mudah mengejeknya untuk pengujian.
AndroidViewModeltetapi mendapatkanCannot create instance exceptionmaka Anda dapat merujuk ke jawaban saya ini stackoverflow.com/a/62626408/1055241