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

Android Hilt开发调用activityViewModels()出现未解析引用问题求助

Hilt下activityViewModels未解析引用问题解决方案

问题排查与解决步骤

  • 确认API使用场景合理性

    by activityViewModels() 是AndroidX Fragment库提供的Fragment专属扩展函数,仅可在Fragment中调用,作用是获取当前Fragment依附的宿主Activity对应的ViewModel实例。若你直接在Activity代码中编写该语句,本身不存在对应API,必然会提示未解析引用。
    若你需要在Activity中直接获取ViewModel实例,替换为 by viewModels() 即可。

  • 补全缺失的依赖

    如果你确认是在Fragment中调用仍报错,说明缺少Fragment KTX扩展依赖,在app模块build.gradle的dependencies节点添加如下配置即可:

    implementation "androidx.fragment:fragment-ktx:1.5.7"
    // 版本可根据你的项目compileSdk版本适配调整,只要不低于你当前其他AndroidX依赖的版本即可
    
  • 修正Hilt配置与ViewModel注解

    1. 你当前引入的androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03属于已废弃的过时依赖,高版本Hilt已经将ViewModel注入能力整合到核心包中,直接删除该依赖即可,无需单独引入。
    2. 你的SelectWifiViewModel类必须添加@HiltViewModel注解,且构造函数添加@Inject注解,示例如下:
      @HiltViewModel
      class SelectWifiViewModel @Inject constructor() : ViewModel() {
          // 你的业务逻辑
      }
      
    3. 所有用到该ViewModel的Activity、Fragment都必须添加@AndroidEntryPoint注解,Hilt才能正常完成实例注入。

额外说明:跨Activity共用ViewModel的需求实现

你当前的思路存在误区:activityViewModels()只能实现同一个Activity下的多个Fragment共用ViewModel,无法实现两个不同的Activity共用同一个ViewModel。ViewModel的生命周期和所属的Activity完全绑定,不同Activity的ViewModel实例是相互隔离的。
如果需要跨Activity共享数据,可采用以下方案:

  • 使用全局单例类存储共享数据,配合生命周期监听在合适的时机清理数据避免内存泄漏
  • 将共享数据持久化到SharedPreferences、数据库等存储层,两个Activity都从存储层读写数据
  • 自定义继承自ViewModel的全局实例,绑定Application生命周期,注意使用时避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:08