【问题标题】:Kodein Framework - property delegate must have a provideDelegate(...) methodKodein 框架 - 属性委托必须有一个 provideDelegate(...) 方法
【发布时间】:2020-04-08 11:00:29
【问题描述】:

我正在尝试使用以下架构构建应用程序:LoginActivity -> MainActivity -> MainActivity 托管的片段中处理的所有其他内容。我也是第一次使用 Kodein 框架,在我的起始片段中出现以下错误:

属性委托必须有一个 'provideDelegate(HomeFragment, KProperty*>' 方法。以下功能均不适用。 provideDelegate(Context [以红色突出显示], KProperty>?) 定义 在 org.kodein.di.android.KodeinPropertyDelegateProvider 类型 'KodeinPropertyDelegateProvider' 没有方法 'getValue(HomeFragment, KProperty>)' 因此它不能作为 委托

这是我目前的代码:

class HomeFragment : Fragment(), KodeinAware {

override val kodein by kodein()
private val factory : MainViewModelFactory by instance()
private lateinit var viewModel: MainViewModel

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val binding : FragmentHomeBinding = FragmentHomeBinding.inflate(inflater, container, false)

    viewModel = ViewModelProviders.of(this, factory).get(MainViewModel::class.java)
    binding.viewModel = viewModel

    return binding.root
}

}

我该如何解决这个问题?

谢谢:)

【问题讨论】:

    标签: android android-fragments kotlin delegates kodein


    【解决方案1】:

    没关系,在 kodein 之后添加类型声明就可以了... :)

    【讨论】:

    • 嗨,我刚刚将 override val kodein by kodein() 更改为 override val kodein: Kodein by kodein() 并且它有效。希望对您有所帮助!
    • 在碎片的情况下不起作用。需要在片段的情况下使用“import org.kodein.di.android.x.kodein”,但对于活动“import org.kodein.di.android.kodein”可以正常工作。你能详细说明两种导入的区别吗?
    【解决方案2】:

    在你的进口改变

    import org.kodein.di.android.kodein
    

    import org.kodein.di.android.x.kodein
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      override val kodein:Kodein by kodein()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多