【问题标题】:How to inject viewModel in base classes like baseActivity or baseFragment using hilt. Android kotlin如何使用 hilt 在 baseActivity 或 baseFragment 等基类中注入 viewModel。安卓科特林
【发布时间】:2021-11-11 09:13:47
【问题描述】:

我尝试使用 hilt 将 viewModel 注入到我的基本活动中

abstract class BaseActivity<VB: ViewBinding, VM: BaseViewModel>(val bindingFactory(LayoutInflater) -> VB) : AppCompatActivity() {

    private val viewModel: VM by viewModels<>()
    lateinit var binding: VB
}

但是在 viewModels() 函数上出现错误 "属性委托必须有一个 'getValue(BaseActivity , KProperty*>)' 方法。以下函数都不适合。"

如何使用 hilt 在基类中注入 viewModel,或者是否可以使用带 hilt 的基类?

【问题讨论】:

  • 为什么不使用 Activity 中的绑定和视图模型,就像没有 Hilt 一样? Hilt 的主要推动力之一是使用 Android 的内置实例创建作为注入到视图模型之类的东西的接缝
  • 由于我有多个活动和片段,我打算使用基类来减少冗余,之前使用这种架构与匕首。这是我第一次使用刀柄构建,所以我不知道这些限制。
  • 我问的是同样的问题,但使用的是 Dagger android。有人知道吗?

标签: kotlin viewmodel dagger inject dagger-hilt


【解决方案1】:

我希望这还不算太晚,但我能够以这种方式将 viewModel 注入基础片段:

class BaseFragment<T : ViewDataBinding, V: ViewModel>(private val modelClass: Class<V>) : Fragment() {
@Inject
protected lateinit var viewModel: V
}

用法如下:

@AndroidEntryPoint
ScanFragment:BaseFragment<FragmentScanBinding, ScanViewModel>(ScanViewModel::class.java){

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多