Skip to content Skip to sidebar Skip to footer

Cannot Create An Instance Of Class Viewmodel In The New Project

I have two different projects. In the first one I use ViewModel with my activity and Room database. Everything works. Then I just created new project for different purposes and the

Solution 1:

Your ViewModel requires an argument application: Application which can only be provided by using a ViewModelFactory like so:

ViewModelFactory

classMainViewModelFactory(
    privateval application: Application
) : ViewModelProvider.Factory {
    @Suppress("unchecked_cast")overridefun<T : ViewModel?>create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
            return MainViewModel(application) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

MainActivity

privatefunapplyAdapterAndViewModel() {
// Not so kotlinic
mainViewModel = ViewModelProvider(this,MainViewModelFactory(application)).get(MainViewModel::class.java)
}

Also, in MainActivity, replace private lateinit var mainViewModel: MainViewModel with

privateval viewModel by viewModels<MainViewModel> { 
MainViewModelFactory(application) }

Post a Comment for "Cannot Create An Instance Of Class Viewmodel In The New Project"