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)

Vincent Tsen
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")
}
}

Can be replaced by ViewModelProvider.Factory

--

--

No responses yet