android - kotlin 中的 HasSupportFragmentInjector 问题 - DispatchingAndroidInjector 为 null

标签 android kotlin dagger

我正在尝试在我的应用程序中实现带有 dagger 2 支持的 mvp 模式

这是对象:

class BaseApplication : Application(), HasActivityInjector
{
    override fun onCreate()
    {
        super.onCreate()
        initDi()
    }

    private fun initDi(){

        DaggerAppComponent.builder().application(this).build().inject(this)
    }

    @Inject lateinit var activityInjector: DispatchingAndroidInjector<Activity>

    override fun activityInjector(): AndroidInjector<Activity>
    {
        return activityInjector
    }
}

    @Singleton
    @Component(modules = arrayOf(AndroidInjectionModule::class, AppModule::class, ActivityBuilder::class))
    interface AppComponent
    {
        @Component.Builder
        interface Builder
        {
            @BindsInstance
            fun application(application: Application): Builder

            fun build(): AppComponent
        }

        fun inject(app: BaseApplication)
    }

    @Module
    class AppModule
    {
        @Provides
        @Singleton
        internal fun provideContext(application: Application): Context
        {
            return application
        }
    }

    @Module
    abstract class ActivityBuilder
    {
        @ContributesAndroidInjector(modules = arrayOf(LoginFragmentProvider::class))
        internal abstract fun bindAuthenticationActivity(): AuthenticationActivity
    }

    @Module
    public abstract class LoginFragmentProvider
    {
        @ContributesAndroidInjector
        abstract LoginFragment provideLoginFragmentFactory();
    }

    class AuthenticationActivity : AppCompatActivity(), HasSupportFragmentInjector
    {
        @Inject lateinit var androidInjector: DispatchingAndroidInjector<Fragment>

        override fun supportFragmentInjector(): AndroidInjector<Fragment>
        {
            return androidInjector
          }
    }

    class LoginFragment : Fragment() {

        override fun onAttach(context: Context?)
        {
             AndroidSupportInjection.inject(this)
             super.onAttach(context)
        }

问题是,当登录 fragment 调用 AndroidSupportInjection.inject(this) 时,AuthenticationActivity supportFragmentInjector 被调用,但 androidInjector 仍然存在空

结果,我遇到了异常:

java.lang.RuntimeException:无法启动 Activity .....AuthenticationActivity}:kotlin.UninitializedPropertyAccessException:lateinit属性androidInjector尚未初始化

我不知道如何解决这个问题

提前致谢

最佳答案

我认为您忘记注入(inject)您的AuthenticationActivity。您应该在 onCreate 中调用 AndroidInjection

override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
}

编辑:您可以查看我的示例存储库以获取更多信息。 https://github.com/savepopulation/dc-tracker

关于android - kotlin 中的 HasSupportFragmentInjector 问题 - DispatchingAndroidInjector 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072410/

相关文章:

android - AmazonSNS - AwsCredentials.properties - NullPointerException

android - 如何在Android中将短信保存到收件箱?

java - 使用来自无限输入的原始数据并在设备上播放

android - Kotlin 注释格式在 Android Studio 中自动与上一行换行

java - Dagger 2 : Injecting member which has constructor parameters

Android:更改WindowManager添加的View的LayoutParams

android - activity_main看起来完全不同

java - onActivityResult() 未在新的嵌套 fragment API 中调用

java - 如何为 MortarActivityScope @Provide 一个 Activity,而不会在方向更改时泄漏 Activity?

android - 将枚举映射到 Dagger 注入(inject)类(相当于 MapBinder)