Sobes.tech
Junior — Middle

What is the role of ViewModelFactory and in what cases is its use justified?

sobes.tech AI

Answer from AI

ViewModelFactory in Android is used for creating instances of ViewModel with constructor parameters. By default, ViewModelProvider creates ViewModels through a parameterless constructor, but if the ViewModel requires dependencies (e.g., repositories), a factory is needed.

Role and use cases:

  • Allows injecting dependencies into ViewModel.
  • Ensures proper creation of ViewModel considering the lifecycle.
  • Simplifies testing by allowing mock objects to be substituted.

Example of usage:

class MyViewModel(private val repo: Repository) : ViewModel() { /*...*/ }

class MyViewModelFactory(private val repo: Repository) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            return MyViewModel(repo) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

// In Activity or Fragment
val factory = MyViewModelFactory(repository)
val viewModel = ViewModelProvider(this, factory).get(MyViewModel::class.java)

Usage is justified when the ViewModel requires parameters in its constructor.