android 安卓匕首柄

ibps3vxo  于 2023-02-20  发布在  Android
关注(0)|答案(2)|浏览(109)

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

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

这是我的导航模块

@InstallIn(ApplicationComponent::class)

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

但我收到错误,因为无法提供MainActivity,需要@Inject或@Provides。我知道dagger不知道如何创建MainActivity,因为它没有构造函数,我无法注入它
那么,我如何获取活动并将其传递给我的NavigationController呢?

2izufjch

2izufjch1#

1.如果您的NavigationModule依赖于Activity,则您将其安装在错误的component中。您应该使用@InstallIn(ActivityComponent::class)
1.在Activity作用域(=== ActivityComponent)中,Hilt可以提供Activity的示例作为依赖项。它不能提供确切的MainActivity的示例。仅从代码示例很难判断这是否能满足您的需要,但您可能只需:

@InstallIn(ActivityComponent::class)
@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: Activity): NavigationController {
        return NavigationController(activity)
    }
}
velaa5lx

velaa5lx2#

我们有7个简单的步骤来实现匕首柄在Android中.

**第1步:**创建一个项目,并为其给予任意名称。Create a new project
**第2步:**创建项目后,设置依赖项工作。没有Android依赖项,我们无法在Android应用程序中实现或运行刀柄。

build.gradleI(:app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}

dependencies {
   implementation 'androidx.core:core-ktx:1.7.0'
   implementation 'androidx.appcompat:appcompat:1.4.1'
   implementation 'com.google.android.material:material:1.5.0'
   implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
   testImplementation 'junit:junit:4.13.2'
   androidTestImplementation 'androidx.test.ext:junit:1.1.3'
   androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

   //hilt
   implementation "com.google.dagger:hilt-android:2.38.1"
   kapt "com.google.dagger:hilt-compiler:2.38.1"
   implementation "androidx.activity:activity-ktx:1.4.0"
}

build.gradleI(:project)

buildscript {
   repositories {
       google()
       mavenCentral()
   }
   dependencies {
       classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1'
   }
}

让我们看看know more 5 step to implementing dagger hilt in Android的链接。

相关问题