【问题标题】:AndroidViewModel vs passing Application context to ViewModelAndroidViewModel 与将应用程序上下文传递给 ViewModel
【发布时间】:2020-01-18 22:24:22
【问题描述】:

documentation 声明如下:

如果 ViewModel 需要 Application 上下文,例如查找系统服务,它可以扩展 AndroidViewModel 类,并在构造函数中有一个接收应用程序的构造函数,因为 Application 类扩展了上下文。

代码示例:

class MainViewModel(application: Application) : AndroidViewModel(application) {
... 
}

两个问题:

  1. 如果我仍然需要将Application 传递给 ViewModel 的 ctor,AndroidViewModel 如何帮助我?
  2. 再一次,如果我需要传递Application,为什么我需要AndroidViewModel?我可以使用 ViewModel 并将其传递给 Application

【问题讨论】:

  • "如果我仍然需要将 Application 传递给 ViewModel 的 ctor,AndroidViewModel 如何帮助我?" -- 你没有将Application 传递给ViewModel 构造函数,因为你没有调用ViewModel 构造函数。工厂是。

标签: android android-architecture-components


【解决方案1】:

如果你提供自己的工厂,你可以将任何你想要的东西传递给一个普通的 ViewModel 对象,你是对的。

但是,如果您使用默认工厂,the source code 显示默认工厂在您的 ViewModel 扩展 AndroidViewModel 时为您填写 Application 实例。

【讨论】:

    【解决方案2】:

    您可以编写您的自定义 ViewModel 而无需扩展 AndroidViewModel,它的功能将是相同的。

    唯一的区别是默认ViewModelFactory 检查ViewModel 是否是AndroidViewModel 的实例,并调用单参数构造函数自动传递Application 上下文。

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 2022-01-02
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多