java - Android:使用 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 片段保留公共 livedata 可观察对象,如加载、错误等。
我想要实现的是我想从 BaseAuthFragment 内部的 BaseAuthViewModel 观察那些常见的 Livedata 对象,这样我就不必单独复制 LoginFragment && RegFragment 中的代码。
但是在 LoginFragment && RegFragment 内部我应该已经有 LoginViewModel 和 RegViewModel,它们是 BaseAuthViewModel 的孩子,所以有可能以某种方式覆盖子片段中的 viewModel 对象类型吗?
解决方案
您可以定义如下内容:
基类
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()
...
}
推荐阅读
- javascript - 在域 Y 上定位来自域 X 的访问者
- bootstrap-4 - 使用引导类“collapsibe”将 dc.js 图表插入 div 时会变小
- flutter-layout - 交错的网格视图不在 Listview 内滚动
- python - 我对我对 Python 断言语句的使用有不同的看法,我想让你告诉我为什么我错了
- python-3.x - 如何使用依赖解析功能进行文本分类?
- asp.net-core - 在 azure 上使用 windows server core 2019 部署 asp.net core 3.1 网站
- c# - 如何检查该网站中是否有元素退出
- sql-server - 当主键数量不同时,同步框架不提供 Sql Compact
- node.js - 使用函数多次出站调用 Autopilot - 运行时应用程序超时
- json - 在 Kemal 中将 JSON 解析为数组(字符串)