Diğerlerinin de belirttiği gibi, AndroidViewModel
uygulamayı almak için elde edebileceğiniz şeyler var, Context
ancak yorumlarda topladığım şeyden, MVVM amacını yenen @drawable
kendi içinden s manipüle etmeye çalışıyorsunuz ViewModel
.
Genel olarak, gerek bir olması Context
sizin de ViewModel
neredeyse evrensel size arasına mantığı bölmek nasıl yeniden düşünmek düşünmelisiniz anlaşılacağı View
s 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.Enum
R.drawable.*
Ya da belki Context
kendi içinde kullandığınız bazı bileşenlere ihtiyacınız var ViewModel
- o zaman bileşeni dışında ViewModel
oluşturun ve Context
içeri aktarın . DI veya tekli anahtarları kullanabilir veya -bağımlı bileşeni ViewModel
in Fragment
/ başlatmadan hemen önce oluşturabilirsiniz Activity
.
Neden rahatsız: Context
Android'e özgü bir şeydir ve s'dekilere bağlı olarak ViewModel
kö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.
AndroidViewModel
Cannot create instance exception