【发布时间】:2020-01-11 03:10:19
【问题描述】:
案例是Activity-Fragment 重新创建:我正在从activity 级别的活动context 创建ViewModel,并尝试使用Fragment 级别访问初始化的ViewModel,使用ViewModelProvider.of() .
下面的代码在快乐的情况下工作;但是当重新创建活动(更改系统语言或权限)时,相同的代码不起作用,并且片段无法访问活动创建的视图模型。
ViewModel 是参数化的,只有一个主构造函数,并使用 ViewModelProvider.Factory 进行初始化
ViewModel 结构
class MessageViewModel(var message: MutableLiveData<String>): ViewModel() { ... }
Activity 中的 ViewModel 初始化
val viewModel = ViewModelProviders.of(this, MessageVMFactory())
.get(MessageViewModel::class.java)
在 Fragment 处访问 ViewModel
val viewModel = ViewModelProviders.of(activity)
.get(MessageViewModel::class.java)
错误
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.krp.android.viewmodeldemo/com.krp.android.viewmodeldemo.MainActivity}:java.lang.RuntimeException:无法创建 com.krp 类的实例。 android.viewmodeldemo.utility.MessageViewModel
【问题讨论】:
标签: android android-fragments android-viewmodel recreate viewmodelproviders