android - ViewModelFactory 需要
问题描述
我正在做一些 kotlin基础的代码实验室,但我并没有真正使用 ViewModel 进入 android,为什么有时似乎需要通过 ViewModelFactory 创建它。在这里你可以看到讨论这个的代码实验室。
他们只是说使用工厂方法模式执行初始化,但我不明白为什么。为什么我们需要使用工厂模式?是因为我们需要向 ViewModel 传递一些参数吗?还是出于其他原因?每次我们需要创建一个 ViewModelFactory 只是为了将参数传递给 ViewModel 吗?
我一直在寻找答案,试图确认是只是传递额外的参数还是因为任何其他原因,但我仍然不确定,我还没有找到答案。
解决方案
ViewModel
使用前有几点需要考虑ViewModelFactory
ViewModel
是LifecycleAware Components
。ViewModel
生存configuration
变化。ViewModelProvider' can only instantiate
ViewModel` 没有参数的构造函数。
为什么我们需要使用工厂模式?
要使用参数进行实例化ViewModel
,需要使用ViewModelFactory
. ViewModelProviders
实用程序无法使用参数构造函数创建 ViewModel 的实例,因为它不知道如何以及在构造函数中传递什么对象。
此外,您应该遵循依赖注入原则。一个类不应该创建它需要的依赖项。它应该被提供而不是创造。
例如 -
public class LogInViewModel extends ViewModel {
private final LogInRepo repo;
public LogInViewModel (LogInRepo repo) {
/* this.repo = new LogInRepo(); Not recommended, It violates DI principle*/
this.repo = repo;
}
}
推荐阅读
- go - Golang:忽略标志参数的位置
- c - 如果元素出现超过 n 次,则删除该元素的出现 - realloc():下一个大小无效
- r - 我应该在哪里对条形图重新排序以使条形组与数据框的顺序相同
- c++ - shared_ptr 没有可行的重载 '='
- wordpress - 如何在产品标题中插入类别名称?
- java - 无法使用 DataSourceFactory 编译 Dropwizard 应用程序
- postgresql - 在使用 postgresql 的存储库包 Spring Boot 中接受带有 @Query 注释的参数
- terraform - 更新到 terraform 版本 0.12.26 后出现“不明确的属性键”错误
- html - 如何在视觉代码中使用图像它不起作用?
- python - 检查行是否与文件中的另一行相同