Android:使用 Koin 覆盖子片段中的视图模型对象?

Android: Override viewmodel object in child fragment using Koin?

我这里有以下案例,我得到了 2 个片段:

LoginFragment : BaseAuthFragment
RegFragment : BaseAuthFragment

和相应的视图模型:

LoginViewModel : BaseAuthViewModel
RegViewModel : BaseAuthViewModel

LoginFragment 有一个 LoginViewModel 对象 RegFragment 有一个 RegViewModel 对象 BaseAuthFragment 有一个 BaseAuthViewModel 对象

我使用 Koin 进行依赖注入,所以 BaseAuthFragment 中的 viewModel 对象声明是这样的:

private val viewModel: BaseAuthViewModel by viewModel()

BaseAuthViewModel 为 Login && Reg 片段保留常见的实时数据可观察对象,例如加载、错误等。

我想要实现的是,我想从 BaseAuthFragment 内部的 BaseAuthViewModel 观察那些常见的 Livedata 对象,这样我就不必单独复制 LoginFragment && RegFragment 中的代码。

但是在 LoginFragment && RegFragment 内部我应该已经有 LoginViewModel 和 RegViewModel,它们是 BaseAuthViewModel 的子项,那么是否可以以某种方式覆盖子片段中的 viewModel 对象类型?

你可以这样定义:

基地class

abstract class BaseFragment : Fragment() {
    /**
     * Every fragment has to have an instance of a view model that extends from the BaseViewModel
     */
    abstract val _viewModel: BaseViewModel

    ...
}

child class

class ChildFragment : BaseFragment() {
    override val _viewModel: ChildViewModel by inject()
...
}