Diğerlerinin de belirttiği gibi, AndroidViewModeluygulamayı almak için elde edebileceğiniz şeyler var, Contextancak yorumlarda topladığım şeyden, MVVM amacını yenen @drawablekendi içinden s manipüle etmeye çalışıyorsunuz ViewModel.
Genel olarak, gerek bir olması Contextsizin de ViewModelneredeyse evrensel size arasına mantığı bölmek nasıl yeniden düşünmek düşünmelisiniz anlaşılacağı Views ve ViewModels.
ViewModelÇekilebilir öğeleri çözümlemek ve bunları Faaliyet / Parçaya beslemek yerine, Parçanın / Faaliyetin ViewModel,. Diyelim ki, açma / kapama durumu için bir görünümde görüntülenecek farklı çekmecelere ihtiyacınız var - ViewModel(muhtemelen boole) durumunu tutması gereken şey budur, ancak Viewçekilebilir olanı buna göre seçmek işidir.
DataBinding ile oldukça kolay yapılabilir :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
Daha fazla durumunuz ve çekilebilir öğeleriniz varsa, mizanpaj dosyasında gereksiz mantığı önlemek için , örneğin bir değeri (örneğin, kart takımları) çeviren özel bir BindingAdapter yazabilirsiniz.EnumR.drawable.*
Ya da belki Contextkendi içinde kullandığınız bazı bileşenlere ihtiyacınız var ViewModel- o zaman bileşeni dışında ViewModeloluşturun ve Contextiçeri aktarın . DI veya tekli anahtarları kullanabilir veya -bağımlı bileşeni ViewModelin Fragment/ başlatmadan hemen önce oluşturabilirsiniz Activity.
Neden rahatsız: ContextAndroid'e özgü bir şeydir ve s'dekilere bağlı olarak ViewModelkötü bir uygulamadır: birim testinin önünde duruyorlar. Öte yandan, kendi bileşen / servis arayüzleriniz tamamen sizin kontrolünüz altındadır, böylece test için kolayca alay edebilirsiniz.
AndroidViewModelCannot create instance exception