Android匕首柄

问题描述

我有一个NavigationController类,它需要一个活动实例,我所有的片段都通过这些活动托管。

class NavigationController constructor(private val activity: MainActivity) {
    
    fun navigateToAuth() {
        activity.supportFragmentManager
            .beginTransaction()
            .replace(R.id.main_container,WelcomeFrag())
            .commitAllowingStateLoss()
    }
}

这是我的NavigationModule

@InstallIn(ApplicationComponent::class)

@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: MainActivity): NavigationController {
        return NavigationController(activity)
    }
}

但是我遇到了错误,因为无法提供MainActivity要求@Inject或@Provides 我知道匕首不知道如何创建MainActivity,因为它没有构造函数,我无法注入

那么我如何获得活动并将其传递给我的NavigationController?

解决方法

  1. 如果您的NavigationModule依赖于Activity,则说明您将其安装在错误的component上。您应该使用@InstallIn(ActivityComponent::class)
  2. Activity范围(=== ActivityComponent)内,Hilt可以提供Activity的实例作为依赖项。它无法提供您确切的MainActivity的实例。 很难仅通过代码示例来判断,这是否可以满足您的需求,但是您可以简单地摆脱:
@InstallIn(ActivityComponent::class)
@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: Activity): NavigationController {
        return NavigationController(activity)
    }
}

相关问答

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