使用Hilt在Fragment中注入依赖失败:lateinit属性未初始化
解决Hilt依赖注入失败问题
核心问题分析
出现lateinit property runner is not initialized的原因是:
- MainFragment未被Hilt管理:Hilt需要在Android组件(如Fragment)上标注
@AndroidEntryPoint才能自动完成依赖注入,你的MainFragment缺少该注解。 - MainActivity构造错误:Android系统会负责创建Activity实例,不能给Activity的构造函数添加
@Inject constructor(),这会干扰Hilt的注入逻辑。
具体修复步骤
1. 给MainFragment添加@AndroidEntryPoint注解
修改MainFragment代码:
@AndroidEntryPoint class MainFragment : Fragment(R.layout.main_fragment) { @Inject lateinit var runner: Runner override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) runner.runProcess() } }
2. 修正MainActivity的构造函数
移除MainActivity的@Inject constructor(),恢复默认构造:
@AndroidEntryPoint class MainActivity : AppCompatActivity(R.layout.activity_main) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { supportFragmentManager.commit { setReorderingAllowed(true) add<MainFragment>(R.id.fragment_container_view) } } } }
3. 确认Application类的Hilt配置
确保你的自定义Application类标注了@HiltAndroidApp(这是Hilt的全局入口):
@HiltAndroidApp class MyApplication : Application()
同时在AndroidManifest.xml中指定该Application:
<application android:name=".MyApplication" <!-- 其他原有配置 --> > </application>
4. 验证依赖配置是否正确
在Module级别的build.gradle(或build.gradle.kts)中确认已添加Hilt相关依赖:
- 顶部插件配置:
plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.dagger.hilt.android' }
- 依赖项配置:
dependencies { // Hilt核心依赖 implementation 'com.google.dagger:hilt-android:2.48' // Kotlin用kapt,Java替换为annotationProcessor kapt 'com.google.dagger:hilt-android-compiler:2.48' }
Kotlin项目需额外开启kapt支持:
kapt { correctErrorTypes = true }
额外检查
Runner类的Java代码中runProcess()方法缺少返回值类型,需补充为public void runProcess() {...},否则编译报错会间接影响注入流程。
内容的提问来源于stack exchange,提问作者speedster01
相关产品推荐
相关产品推荐

