gpt4 book ai didi

android - android重新创建Activity和Fragment时java.lang.RuntimeException : Cannot create an instance of class ViewModel,

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:36 24 4
gpt4 key购买 nike

案例是 Activity-Fragment 重新创建:我正在从 activity 级别的 Activity context 创建 ViewModel 并且尝试使用 ViewModelProvider.of() 在 Fragment 级别访问初始化的 ViewModel

下面的代码适用于快乐的情况;但是当重新创建 Activity 时(更改系统语言或权限),相同的代码不起作用,并且 fragment 无法访问创建的 Activity View 模型。

ViewModel 是参数化的,只有一个主构造函数,并使用 ViewModelProvider.Factory 进行初始化

View 模型结构

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: 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

最佳答案

如果您已通过工厂初始化 ViewModel,则无论上下文如何,都必须通过工厂访问它。当系统重新创建 Activity 或 fragment 时,似乎是 ViewModel 问题。

它在 Fragment 中运行良好

val viewModel = ViewModelProviders.of(activity, MessageVMFactory())
.get(MessageViewModel::class.java)

关于android - android重新创建Activity和Fragment时java.lang.RuntimeException : Cannot create an instance of class ViewModel,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com