You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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实例的两种方式:
    // 基础写法
    val viewModel = ViewModelProvider(this)[CustomViewModel::class.java]
    
    // Kotlin KTX推荐的简洁写法(借助委托属性)
    val viewModel: CustomViewModel by viewModels()
    
    如果是在Fragment中需要共享Activity的ViewModel,只需把viewModels()换成activityViewModels()即可。

额外小提示

如果你的项目还未完全迁移到AndroidX,可以直接用Android Studio的自动迁移工具:点击菜单栏Refactor > Migrate to AndroidX...,工具会自动帮你替换所有旧依赖、导入语句甚至布局中的标签,省心又高效。

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

火山引擎 最新活动