gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:44:44 25 4
gpt4 key购买 nike

我正在尝试在我的应用中实现支持 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 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com