AndroidViewModel与向ViewModel传递应用程序上下文

AndroidViewModel与向ViewModel传递应用程序上下文,android,android-architecture-components,Android,Android Architecture Components,缔约国声明如下: 如果ViewModel需要应用程序上下文,例如查找系统服务,则它可以扩展AndroidViewModel类,并在构造函数中具有接收应用程序的构造函数,因为应用程序类扩展了上下文 代码示例: class MainViewModel(application: Application) : AndroidViewModel(application) { ... } 两个问题: 如果我需要将应用程序传递给ViewModel的ctor,AndroidViewModel如何帮助我 同样

缔约国声明如下:

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

代码示例:

class MainViewModel(application: Application) : AndroidViewModel(application) {
... 
}
两个问题:


  • 如果我需要将
    应用程序
    传递给ViewModel的ctor,AndroidViewModel如何帮助我
  • 同样,如果我需要通过
    应用程序
    ,为什么我需要AndroidViewModel?我可以使用ViewModel并将其传递给应用程序

  • 您可以编写自定义的
    ViewModel
    ,而无需扩展
    AndroidViewModel
    ,并且它在功能上是相同的


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

    您可以编写自定义的
    ViewModel
    ,而不扩展
    AndroidViewModel
    功能相同


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

    如果您提供自己的工厂,您可以将任何需要的内容传递给常规的
    ViewModel
    对象,这一点您是正确的


    但是,如果您使用的是默认工厂,则显示默认工厂仅为您填写
    应用程序
    实例,如果您的ViewModel扩展了
    AndroidViewModel
    ,如果您提供自己的工厂,您可以将任何想要的内容传递给常规的
    ViewModel
    对象,你说得对


    但是,如果您使用的是默认工厂,则显示默认工厂仅为您填写
    应用程序
    实例,如果您的ViewModel扩展了
    AndroidViewModel
    ,“如果我仍然需要将应用程序传递给ViewModel的ctor,AndroidViewModel如何帮助我?”--您没有将
    应用程序
    传递给
    视图模型
    构造函数,因为您没有调用
    视图模型
    构造函数。工厂是。“如果我需要将应用程序传递给ViewModel的ctor,AndroidViewModel如何帮助我?”--您没有将
    应用程序
    传递给
    ViewModel
    构造函数,因为您没有调用
    ViewModel
    构造函数。一家工厂正在建造中。