[英]Android: Dagger hilt, inject navigation component
我正在尝试为我的 navController 提供匕首柄。 但是我使用的方法不起作用。 我想提供 navController 以便通过构造函数注入将其注入我的片段中。
private val navController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(navController.graph) }
@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)
是这里的问题,但我不知道正确的解决方案..
我感谢每一个帮助,谢谢!
原因:java.lang.ClassCastException:com.example.app.App 无法转换为 androidx.appcompat.app.AppCompatActivity
这对我有用。 如果您安装在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
注释您的片段
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.