【问题标题】:Android: Override viewmodel object in child fragment using Koin?Android:使用 Koin 覆盖子片段中的视图模型对象?
【发布时间】:2021-08-14 18:53:06
【问题描述】:

我这里有以下情况,我得到了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 片段保留公共 livedata 可观察对象,例如加载、错误等。

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

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

【问题讨论】:

    标签: java android kotlin mvvm koin


    【解决方案1】:

    你可以这样定义:

    基类

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

    子类

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2021-12-17
      • 1970-01-01
      • 2013-05-18
      • 2021-02-11
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多