首页 > 解决方案 > ViewModelFactory 需要

问题描述

我正在做一些 kotlin基础的代码实验室,但我并没有真正使用 ViewModel 进入 android,为什么有时似乎需要通过 ViewModelFactory 创建它。在这里你可以看到讨论这个的代码实验室

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

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

标签: androidkotlindesign-patternsandroid-viewmodel

解决方案


ViewModel使用前有几点需要考虑ViewModelFactory

  1. ViewModelLifecycleAware Components
  2. ViewModel生存configuration变化。
  3. ViewModelProvider' can only instantiateViewModel` 没有参数的构造函数。

为什么我们需要使用工厂模式?

要使用参数进行实例化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;
    }
}

推荐阅读