我正在尝试为我的navController提供匕首柄。但是我使用的方法不起作用。 我想提供navController以便通过构造函数注入将其注入片段中。
<a class="btn btn-danger" href="{% url 'register:gast-verwijderen' slug=slug pk=pk %}">X</a>
private val navController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(navController.graph) }
我还创建了FragmentFactory类,以便通过构造函数注入依赖项。我知道@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
}
是这里的问题,但我不知道适当的解决方案。
感谢您的帮助,谢谢!
原因:java.lang.ClassCastException:com.example.app.App无法强制转换为 androidx.appcompat.app.AppCompatActivity
答案 0 :(得分:2)
这对我有用。如果您安装在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