Android:Dagger刀柄,注入导航组件

问题描述

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

没有Di.Module,FragmentClass

<a class="btn btn-danger" href="{% url 'register:gast-verwijderen' slug=slug pk=pk %}">X</a>

当前方法,Di.Module

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

解决方法

这对我有用。如果您安装在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

注释片段

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...