android - ViewModelFactory需要

标签 android kotlin design-patterns android-viewmodel

我正在做一些 kotlin fundamentals 的代码实验室我并没有真正了解 Android 中的 ViewModel,为什么有时似乎需要通过 ViewModelFactory 创建它。 Here你可以看到codelab其中谈到了这一点。

他们只是说使用 factory method pattern 执行初始化但我不明白为什么。为什么我们需要使用工厂模式?是因为我们需要向 ViewModel 传递一些参数吗?还是有其他原因?每次我们需要创建一个ViewModelFactory只是为了将参数传递给ViewModel吗?

我一直在寻找答案,试图确认是否只是为了传递额外的参数还是因为其他原因,但我仍然不确定,我还没有找到答案。

最佳答案

在使用ViewModelViewModelFactory之前需要考虑一些事情

  1. ViewModelLifecycleAware 组件
  2. ViewModel配置更改后仍然存在。
  3. ViewModelProvider' 只能使用无参数构造函数实例化ViewModel`。

Why do we need to use factory pattern?

要使用参数实例化ViewModel,需要使用ViewModelFactoryViewModelProviders 实用程序无法使用参数构造函数创建 ViewModel 实例,因为它不知道如何以及在构造函数中传递哪些对象。

此外,您应该遵循依赖注入(inject)原则。类不应该创建它需要的依赖项。它应该被提供而不是创造。

例如 -

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;
    }
}

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

相关文章:

android - 使用 root 安装 APK,处理 "/data/local/tmp/"文件夹的新限制

android - 以编程方式更改导航选项卡的颜色

java - 将 kotlin 谓词转换为 java

android - 如何在 kotlin 中使用 fragment

design-patterns - 创建 Web 内容时保存/发布的最佳实践

java - Rest WebService 客户端应使用哪种设计模式?

安卓打开邮件客户端

android - 可以在安装后以编程方式更改应用程序图标吗?

kotlin - 为什么我们应该避免使用基类的开放成员?

design-patterns - 静态工厂模式