案例是Activity-Fragment
的重现:我正在从ViewModel
级别的活动context
创建activity
,并尝试访问{{1 }}级,使用ViewModel
。of()。
下面的代码在很高兴的情况下有效;但是当重新创建活动(更改系统语言或权限)时,相同的代码不起作用,并且片段无法访问创建活动的viewModel。
ViewModel已参数化,只有一个主构造函数,并使用ViewModelProvider.Factory
进行了初始化。Fragment
ViewModelProvider
class MessageViewModel(var message: MutableLiveData<String>): ViewModel() { ... }
java.lang.RuntimeException:无法启动活动ComponentInfo {com.krp.android.viewmodeldemo / com.krp.android.viewmodeldemo.MainActivity}:java.lang.RuntimeException:无法创建com.krp类的实例。 android.viewmodeldemo.utility.MessageViewModel
答案 0 :(得分:3)
如果已通过Factory初始化ViewModel,则无论任何上下文,都必须通过Factory访问它。当系统重新创建活动或片段时,似乎出现ViewModel问题。
它在Fragment正常工作
val viewModel = ViewModelProviders.of(activity, MessageVMFactory())
.get(MessageViewModel::class.java)