首页 > 解决方案 > 用 koin 检索片段

问题描述

我的项目有多个模块,我正在使用 koin。我有home模块中的 HomeActivity 和功能模块中的 AskQuestionFragment。我需要在 HomeActivity 中显示 AskQuestionFragment,所以我尝试用 koin 注入片段。

factory (named("askFragment")) { AskQuestionFragment() }

然后在 HomeActivity 我写这个

private val fragmentAsk by inject<Fragment>(named("askFragment"))
override fun onCreate(...) {
    val pagerAdapter = PagerAdapter(fragmentAsk, fragmentOther, fragmentOther2, fragmentBlablabla)
    viewPager.adapter = pagerAdapter
}

它给了我错误Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'androidx.fragment.app.Fragment' & qualifier:'askFragment'. Check your definitions!

出于测试目的,我试图改变

factory (named("askFragment")) { AskQuestionFragment() }成为factory (named("askFragment")) { 74521647256142765412 }

它运行良好,所以我认为 koin 不支持片段注入

如何解决?

标签: androidkoin

解决方案


您的问题是您正在尝试注入子类型“Fragment”,但您的 bean 定义适用于您的类“AskQuestionFragment”。

像这样更改您的声明:

private val fragmentAsk by inject<AskQuestionFragment>(named("askFragment"))

或者,您可以像这样声明您的类型:

private val fragmentAsk: AskQuestionFragment by inject(named("askFragment"))

推荐阅读