android - 需要一个 ViewModel Provider Factory

标签 android android-viewmodel android-mvvm

我想知道为什么构造函数中具有不同参数的 ViewModel 需要一个 ViewModel Provider Factory 。为什么不能使用常规构造函数实例化 ViewModel new MyViewModel(parameter1 , parameter2);

最佳答案

没有什么可以阻止您使用 new 关键字创建 ViewModel 对象。本质上,当没有提供构造函数参数时,这就是 Factory Provider 在内部所做的,但是围绕它还有其他功能。例如生命周期管理。 ViewModel 特别与生命周期构造相关联,例如 Fragments 和 Activity。当事情变得足够复杂时,您将需要对象工厂来进行依赖管理。

对于你给出的简单例子

val vm = MyViewModel(height=10, weight=20)

创建那些高度和体重对象更容易,因为它们是整数,但如果它是一个复杂的依赖关系,比如

val vm = MyViewModel(repo=MyRepository())

如果 MyRepository 依次依赖于 Retrofit、Room DataBase、Shared Preference 等,会怎样

这就是工厂模式发挥作用的地方。可以使用 Dagger 等依赖注入(inject)工具轻松自动生成工厂模式。

工厂模式用于复杂的依赖提供机制。

关于android - 需要一个 ViewModel Provider Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55862425/

相关文章:

android - 退出 Android 上的 SQLite shell

android - 如何在首选项中存储图像资源/名称

javascript - Cordova 防止 webview 拖拽字段焦点?

android - 如何使一个 ViewModel 类向 Activity 或 fragment 返回多种数据类型

android - 抽象 ViewModel 不更新 LiveData Android MVVM

接收流的Android单元测试 View 模型

android - 在父 LinearLayout 触摸上更改子 TextView 颜色

Android:带有协程的易碎 ViewModel 单元测试

android - 具有多个参数的 LiveData Transformations.map()

android - 如果存在则更新记录,否则在 Room 中插入新记录