Kotlin项目中ViewModelProviders引用未解析问题求助
解决ViewModelProviders导入未解析的问题
这个问题核心在于你还在使用旧版的Android Architecture Components(android.arch包),而目前Android官方已经全面切换到AndroidX生态,旧的android.arch相关包已被废弃,所以IDE会提示导入未解析。下面是针对性的解决方案:
1. 替换依赖为AndroidX版本
先修改Module级别的build.gradle文件,把旧的android.arch.lifecycle:viewmodel依赖替换为适配Kotlin的AndroidX版本:
// 替换掉原有的android.arch依赖 def lifecycleVersion = "2.6.2" // 建议使用最新稳定版 implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion" // 如果需要结合LiveData使用,可额外添加 implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"
2. 确保项目启用AndroidX
检查项目根目录下的gradle.properties文件,确认包含以下配置(没有的话直接添加):
android.useAndroidX=true android.enableJetifier=true
其中enableJetifier会自动将第三方库中的旧依赖转换为AndroidX版本,避免兼容性冲突。
3. 更新导入与ViewModel获取方式
旧的ViewModelProviders已被AndroidX的ViewModelProvider(注意是单数)取代,同时Kotlin有更简洁的KTX扩展写法:
- 替换导入语句:
// 删除旧导入:import android.arch.lifecycle.ViewModelProviders // 换成AndroidX的导入 import androidx.lifecycle.ViewModelProvider // 若使用KTX扩展写法,需额外导入(已包含在lifecycle-viewmodel-ktx依赖中) import androidx.lifecycle.viewModels - 获取ViewModel实例的两种方式:
如果是在Fragment中需要共享Activity的ViewModel,只需把// 基础写法 val viewModel = ViewModelProvider(this)[CustomViewModel::class.java] // Kotlin KTX推荐的简洁写法(借助委托属性) val viewModel: CustomViewModel by viewModels()viewModels()换成activityViewModels()即可。
额外小提示
如果你的项目还未完全迁移到AndroidX,可以直接用Android Studio的自动迁移工具:点击菜单栏Refactor > Migrate to AndroidX...,工具会自动帮你替换所有旧依赖、导入语句甚至布局中的标签,省心又高效。
内容的提问来源于stack exchange,提问作者RedBassett




