使用lazy属性委托初始化Android ViewModel时缺少getValue方法报错如何解决
报错原因
- 核心问题是代码存在语法错误:
ViewModelProvider.(this)中多了一个多余的英文句号,错误的语法导致编译器无法正确识别lazy闭包的返回值类型,进而触发委托方法匹配失败的报错。 - 补充排查点:如果修正语法后依然报错,可检查是否正确导入了Kotlin标准库相关依赖,以及ViewModel的依赖包是否版本匹配。
解决方法
- 首先修正语法错误,删除
ViewModelProvider后面多余的句号,修改后的代码如下:
private val quizViewModel: QuizViewModel by lazy { ViewModelProvider(this).get(QuizViewModel::class.java) }
- 若使用的是AndroidX Lifecycle 2.2.0及以上版本,推荐使用官方提供的KTX扩展简化写法,无需手动实现lazy委托:
- 先确保模块级build.gradle中已引入activity KTX依赖:
implementation "androidx.activity:activity-ktx:1.7.2"(版本可根据你的项目适配调整) - 直接用
viewModels()属性委托初始化即可:
private val quizViewModel: QuizViewModel by viewModels() - 先确保模块级build.gradle中已引入activity KTX依赖:
内容的提问来源于stack exchange,提问作者nazim
相关产品推荐
相关产品推荐

