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
注释你的片段
我正在尝试为我的 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