Case is of Activity-Fragment
Recreate : I am creating ViewModel
from activity context
at activity
level and trying to access the initialised ViewModel
at Fragment
level, using ViewModelProvider
.of().
Below code works in happy case; but when activity is recreated (changes system language or permission), same code don't work, and fragment is not able to access the activity created viewModel.
ViewModel is parameterised and has only one primary constructor and initialised using ViewModelProvider.Factory
ViewModel Structure
class MessageViewModel(var message: MutableLiveData<String>): ViewModel() { ... }
ViewModel Initialisation at Activity
val viewModel = ViewModelProviders.of(this, MessageVMFactory())
.get(MessageViewModel::class.java)
Accessing ViewModel at Fragment
val viewModel = ViewModelProviders.of(activity)
.get(MessageViewModel::class.java)
Error
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.krp.android.viewmodeldemo/com.krp.android.viewmodeldemo.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.krp.android.viewmodeldemo.utility.MessageViewModel