kotlin中HasSupportFragmentInjector的问题 - DispatchingAndroidInjector为null

时间:2017-11-02 10:01:29

标签: 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)
        }

问题是,当登录片段调用 AndroidSupportInjection.inject(this)时,会调用AuthenticationActivity supportFragmentInjector ,但 androidInjector 仍然是空

结果,我得到了例外:

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

我不确定如何解决这个问题

提前致谢

1 个答案:

答案 0 :(得分:3)

我想你忘了注入你的AuthenticationActivity。您应该在AndroidInjection中致电onCreate

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

修改:您可以查看我的示例回购以获取更多信息。 https://github.com/savepopulation/dc-tracker