当前位置: 首页 > 知识库问答 >
问题:

Android:匕首柄,注入导航组件

牛越
2023-03-14

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

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
}

我还创建了FragmentWorks类,以便通过构造函数注入我的依赖项。我知道(上下文为AppCompat活动)是这里的问题,但我不知道正确的解决方案…

感谢您的帮助,谢谢!

原因:java.lang.ClassCastException:com.example.app。应用程序无法强制转换为androidx.appcompat.App.AppCompatActivity

共有1个答案

沈健
2023-03-14

这对我有用。如果在活动组件中安装,则应提供该活动。我只是注入片段的导航器。这就是为什么我使用@InstallIn(ActivityComponent::class)

@Module
@InstallIn(ActivityComponent::class)
object MainActivityModule {

    @Provides
    fun provideNavController(activity: Activity): NavController {
        return activity.findNavController(R.id.navHostFragment)
    }
}

在这种情况下,< code > r . id . navshostfragment 不是导航图的id,而是片段主机的id。

编辑:正如安德鲁指出的。不要忘记用< code > @ androdidentrypoint 注释您的片段

 类似资料:
  • 我正在MVVM和Dagger 2中制作小型Android应用程序。但是我不知道如何正确使用Dagger 2,以防我有一个活动和两个片段。这两个片段都是ViewModels的所有者。我已经将ViewModelProvider注入了片段,但我仍然对这个解决方案感到困惑。也许有人会改进我的代码? 活动: 第一个片段: 第二个片段: 在这种情况下,两个片段都可以工作,但我只能在其中一个片段中注入ViewM

  • 我使用Dagger-Hilt进行依赖注入,但是我不知道如何在抽象类中进行字段注入。 [DI包] 我使用匕首剑柄(AppModule.kt)将“ErrorHandler”作为单例提供 扩展到BaseUseCase以上的用例都是为匕首剑柄(UseCaseModule.kt)编写的。 > 我尝试使用匕首柄(如BaseUseCaseModule.kt)提供或绑定BaseUseCase类,但是由于它具有类型

  • 基于本教程使用Dagger Hilt添加子组件需要 这就是如何创建子组件 我的问题是如何实现 因为它没有显示它是如何提供给UserManager类的 我正在尝试创建一个AppComponent来测试子组件如何与Dagger Hilt一起工作 并在应用中 我应该如何在中创建构建器,创建实现Provider的匿名类不正确吗?

  • 我正在使用Dagger 2,在为我的类实现测试时,模块中的generate singleton providers存在一些问题。 所以我有两个问题。 > 我不能使用构造函数注入,因为有一个默认的构造函数。如何从测试模块中获取Foo? 在和中,如何确保在运行每个测试时创建的新实例? 谢谢

  • 我使用匕首有一段时间了,现在开始迁移到剑柄,但我不明白注射activity和碎片的好处。在Dagger中,它是和类似于的东西 抱歉,如果这是个愚蠢的问题。

  • 我目前正在尝试将匕首2集成到一个Android应用程序中。我的项目设置如下: 库 应用程序(取决于库) 在我的library项目中,我定义了一个类,以后我将把它注入到库和app项目中需要它的其他类(活动和常规类)中。 我也是这么想的,因为实际上myManager总是空的。很明显,它的构造函数也从来没有被调用过,所以我想我一定遗漏了一些配置方面的东西?或者也许我误解了文档,它根本不是这样工作的?My