Member-only story
Implement ViewModelProvider.Factory Interface for Custom ViewModel / AndroidViewModel Factory Creation
We do NOT need to extend ViewModelProvider.NewInstanceFactory (for ViewModel) or ViewModelProvider.AndroidViewModel (for AndroidViewModel)
2 min readNov 20, 2021
In my previous post — Recommended Ways To Create ViewModel or AndroidViewModel, I mentioned that in order to create ViewModel
, we need to create a factory that extends ViewModelProvider.NewInstanceFactory()
and to create AndroidViewModel
, we need to extend ViewModelProvider.AndroidViewModelFactory()
.
Well, it works, but it is unnecessary. We can just implement the ViewModelPrvoider.Factory
interface directly for both of them.
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")
}
}