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

如何使用Hilt将Jetpack Compose的rememberNavController注入到Activity?

问题原因

  1. 你写的NavigationModule不符合Hilt的依赖提供规则:
    • 提供依赖的方法没有添加@Provides注解,Hilt无法识别该方法用于提供依赖
    • 方法添加了@Composable注解,@Composable函数只能在Compose上下文环境中调用,Hilt注入逻辑运行在普通Android生命周期上下文,没有对应的执行环境,根本无法调用该方法生成NavHostController实例
  2. 你对NavHostController的使用场景理解错误:NavHostController是和Compose视图生命周期绑定的控制器,必须在Compose Composition上下文中通过rememberNavController()创建,本身就不适合通过Hilt注入到Activity中。

解决方案

  • 直接删除整个NavigationModule文件,该实现没有作用
  • 去掉MainActivity中注入navHostController的代码,直接在setContent的Compose块中创建navHostController实例再传入NavigationComponent

修改后的MainActivity代码如下:

package com.example.crud.ui

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.navigation.compose.rememberNavController
import com.example.crud.navigation.NavigationComponent
import com.example.crud.ui.theme.CRUDTheme
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            CRUDTheme {
                Surface(color = MaterialTheme.colors.background) {
                    // 直接在Compose上下文中创建NavHostController
                    val navHostController = rememberNavController()
                    NavigationComponent(navHostController)
                }
            }
        }
    }
}

其余代码无需修改,重新编译即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:05