Özel ViewModel / AndroidViewModel Fabrika Oluşturma için ViewModelProvider.Factory Arayüzünü Uygulayın

Bir önceki yazımda – ViewModel veya AndroidViewModel Oluşturmanın Önerilen Yollarıoluşturmak için bahsettiğim ViewModel
uzanan bir fabrika oluşturmamız gerekiyor. ViewModelProvider.NewInstanceFactory()
ve yaratmak AndroidViewModel
uzatmamız gerekiyor ViewModelProvider.AndroidViewModelFactory()
.
Şey, işe yarıyor ama öyle gereksiz. sadece uygulayabiliriz ViewModelPrvoider.Factory
her ikisi için doğrudan arayüz.
ViewModelProvider.NewInstanceFactory()
class MyViewModelFactory(private val repository: Repository)
: ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
ViewModelProvider.Factory ile değiştirilebilir
class MyViewModelFactory(private val repository: Repository)
: ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
ViewModelProvider.AndroidViewModelFactory(app)
class MyAndroidViewModelFactory(
private val app: Application,
private val repository: Repository)
: ViewModelProvider.AndroidViewModelFactory(app) {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(
MyAndroidViewModel::class.java)) {
return MyAndroidViewModel(app, repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
ViewModelProvider.Factory ile değiştirilebilir
class MyAndroidViewModelFactory(
private val app: Application,
private val repository: Repository)
: ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(
MyAndroidViewModel::class.java)) {
return MyAndroidViewModel(app, repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
İkisinden beri ViewModelProvider.NewInstanceFactory()
ve ViewModelProvider.AndroidViewModelFactory()
uygulamakViewModelPrvoider.Factory
arayüzü, sadece uygulayabiliriz ViewModelPrvoider.Factory
özel oluşturmak için doğrudan arayüz ViewModel
/ AndroidViewModel
farklı yapıcı parametreleri alan fabrika. Burada ek bir katmana ihtiyacımız yok.
Bu arada, aldığım geri bildirim bu orta başka bir daha iyi yaklaşımı önermek kullanmaktır Hilt Bağımlılık Enjeksiyonu özel oluşturmak için fabrikayı kullanmak yerine ViewModel
olarak da bilinen yapıcı bağımlılık enjeksiyonu.
Şahsen Hilt’i henüz kullanmadım ve kesinlikle öğrenip blog yazacağım.