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

Android中使用Dagger Hilt实现Activity与Fragment共享ViewModel报错解决

问题描述

我希望在Android中使用Dagger Hilt实现Activity与其Fragment共享ViewModel,以下是我的代码:

Activity代码

class MyActivity : AppCompatActivity(){
 private val viewModel : SharedViewModel by viewModels()
//***
//***
//***
}

Fragment代码

class MyFragment : Fragment(){
 private val viewModel : SharedViewModel by activityViewModels()
//***
//***
//***
}

仅在Activity中创建ViewModel时一切正常,但尝试在其Fragment中创建时出现如下错误:

Caused by: android.view.InflateException: (...) Error inflating class fragment
SharedFragment.getViewModel(SharedFragment.kt:23)
SharedFragment.onViewCreated(SharedFragment.kt:23)
Caused by: java.lang.IllegalArgumentException: CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY`
MyActivity.onCreate(MyActivity.kt:60)
解决方法

这个错误是因为Hilt依赖注入上下文配置不全,ViewModel创建时缺少必要的SavedStateRegistryOwner参数,按以下步骤修复:

  • 给Activity和Fragment添加Hilt入口注解
    必须确保宿主Activity和关联Fragment都标记@AndroidEntryPoint,让Hilt能正确注入依赖:

    @AndroidEntryPoint
    class MyActivity : AppCompatActivity(){
        private val viewModel : SharedViewModel by viewModels()
        // ... 其他代码
    }
    
    @AndroidEntryPoint
    class MyFragment : Fragment(){
        private val viewModel : SharedViewModel by activityViewModels()
        // ... 其他代码
    }
    
  • 检查ViewModel的Hilt注解
    你的SharedViewModel必须使用@HiltViewModel注解,且构造函数通过@Inject注入,包含必要的SavedStateHandle:

    @HiltViewModel
    class SharedViewModel @Inject constructor(
        private val savedStateHandle: SavedStateHandle,
        // 其他需要注入的依赖
    ) : ViewModel() {
        // ... ViewModel业务逻辑
    }
    
  • 确认Fragment的ViewModel访问时机
    不要在Fragment的onCreateView之前(比如构造函数、onAttach早期阶段)调用by activityViewModels(),确保在onViewCreated或之后访问,或者直接在属性声明时使用(只要Fragment已正确关联到Activity)。

  • 验证全局Hilt配置
    确保你的Application类添加了@HiltAndroidApp注解,这是Hilt初始化的核心:

    @HiltAndroidApp
    class MyApplication : Application() {
        // ... 应用初始化逻辑
    }
    

    同时检查项目build.gradle文件,确认已正确引入Hilt插件和依赖库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:40:27