1

我正在尝试为我的 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 类,以便通过构造函数注入我的依赖项。我知道这(context as AppCompatActivity)是这里的问题,但我不知道正确的解决方案..

我感谢每一个帮助,谢谢!

错误

原因:java.lang.ClassCastException: com.example.app.App 无法转换为 androidx.appcompat.app.AppCompatActivity

4

1 回答 1

5

这对我有用。如果您安装在ActivityComponent. 我只是注入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

于 2020-08-19T13:50:44.500 回答