Я использую следующие зависимости gradle для Dagger: - В файле version.gradle
def dagger = [:]
dagger.runtime = "com.google.dagger:dagger:2.24"
dagger.android = "com.google.dagger:dagger-android::2.24"
dagger.android_support = "com.google.dagger:dagger-android-support::2.24"
dagger.compiler = "com.google.dagger:dagger-compiler::2.24"
dagger.android_support_compiler = "com.google.dagger:dagger-android-processor::2.24"
deps.dagger = dagger
build.gradle модуля приложения используйте следующий код: -
implementation deps.dagger.runtime
implementation deps.dagger.android
implementation deps.dagger.android_support
kapt deps.dagger.android_support_compiler
kapt deps.dagger.compiler
Пожалуйста, создайте `MyApplicationAppInjector class
class MyApplicationAppInjector : AppInjector() {
fun init(app: ApplicationController) {
DaggerMyAppComponent.builder().application(app)
.build().inject(app)
app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
handleActivity(activity as AppCompatActivity)
}
override fun onActivityStarted(activity: Activity) {
}
override fun onActivityResumed(activity: Activity) {
}
override fun onActivityPaused(activity: Activity) {
}
override fun onActivityStopped(activity: Activity) {
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {
}
override fun onActivityDestroyed(activity: Activity) {
}
})
}
}
Создать интерфейс MyAppComponent как: -
@SuppressWarnings("unchecked")
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
)
interface MyAppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): MyAppComponent
}
fun inject(app: ApplicationController)
}
создать класс
open class AppInjector {
fun handleActivity(activity: AppCompatActivity) {
if (activity is HasAndroidInjector) {
AndroidInjection.inject(activity)
}
activity.supportFragmentManager
.registerFragmentLifecycleCallbacks(
object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentCreated(
fm: FragmentManager,
f: Fragment,
savedInstanceState: Bundle?
) {
AndroidSupportInjection.inject(f)
}
}, true
)
}
}
и в onCreate ()метод вашего класса приложения использовать этот код: -
`MyApplicationAppInjector().init(this)``
Я надеюсь, что это решит вашу проблему