我正在做一些kotlin fundamentals的代码实验室,而我实际上并没有使用ViewModel进入android系统,为什么有时似乎需要通过ViewModelFactory创建它。 Here您可以看到讨论此问题的codelab

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

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

最佳答案

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

  • ViewModelLifecycleAware Components
  • ViewModel可以保留configuration的更改。
  • 带有无参数构造函数的
  • ViewModelProvider' can only instantiate ViewModel`。



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

    10-07 19:23
    查看更多