You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin使用by viewModels()委托出现Unresolved Reference错误怎么解决?

问题排查结果及修复方案
  • 核心错误:by viewModels()属性委托的使用场景错误。你将声明ViewModel实例的代码写在了GameViewModel类内部,而viewModels()是Fragment/Activity的专属扩展函数,只能在Fragment或Activity类中调用,无法在ViewModel内部使用,因此触发接收器类型不匹配的报错。
  • 修复步骤:
    1. 将private val viewModel: GameViewModel by viewModels()这行代码从GameViewModel类中移除,移动到对应的GameFragment或者宿主Activity类中。
    2. 修正后的GameViewModel代码示例:
    class GameViewModel : ViewModel()  {
        init {
            Log.d("GameViewModel", "GameViewModel created!")
        }
    
        private var score = 0
        private var currentWordCount = 0
        private var _currentScrambledWord = "test"
        val currentScrambledWord: String
            get() = _currentScrambledWord
    
        override fun onCleared() {
            super.onCleared()
            Log.d("GameViewModel", "GameViewModel destroyed!")
        }
    }
    
    1. Fragment中调用ViewModel的示例:
    class GameFragment : Fragment() {
        // viewModels委托写在Fragment内部
        private val viewModel: GameViewModel by viewModels()
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            // 正常调用viewModel的属性和方法
            Log.d("GameFragment", "当前乱序单词:${viewModel.currentScrambledWord}")
        }
    }
    
  • 其他说明:你提供的依赖配置没有问题,不需要调整依赖,仅修改代码位置即可解决报错。

内容的提问来源于stack exchange,提问作者Nicolas Briand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:18:02