Android: 匕首柄,注入导航组件

Android: Dagger hilt, inject navigation component

我正在尝试为我的 navController 提供匕首柄。但是我使用的方法不起作用。 我想提供 navController 以便通过构造函数注入将其注入到我的片段中。

没有Di.Module,FragmentClass

private val navController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(navController.graph) }

当前方法,Di.Module

@Module
@InstallIn(ApplicationComponent::class)
object AndroidModule {

@Provides
fun provideNavController(@ApplicationContext context: Context): NavController = lazy {
    (context as AppCompatActivity).findNavController(R.navigation.nav_main)
}.value

@Provides
fun provideAppbarConfiguration(navController: NavController): AppBarConfiguration = lazy {
    AppBarConfiguration(navController.graph)
}.value
}

我还创建了 FragmentFactory class 以便通过构造函数注入我的依赖项。我知道 (context as AppCompatActivity) 是这里的问题,但我不知道正确的解决方案..

非常感谢您的帮助,谢谢!

错误

Caused by: java.lang.ClassCastException: com.example.app.App cannot be cast to androidx.appcompat.app.AppCompatActivity

这对我有用。如果安装在 ActivityComponent 中,则应提供 activity。我只注入 Fragment 的导航器。所以这就是我使用 @InstallIn(ActivityComponent::class)

的原因
@Module
@InstallIn(ActivityComponent::class)
object MainActivityModule {

    @Provides
    fun provideNavController(activity: Activity): NavController {
        return activity.findNavController(R.id.navHostFragment)
    }
}

在这种情况下,R.id.navHostFragment 不是导航图的 ID,而是片段主机的 ID。

编辑:正如安德鲁指出的那样。不要忘记用 @AndroidEntryPoint

注释你的片段