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

问题描述 投票:0回答:2

documentation声明以下内容:

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

代码示例:

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

两个问题:

  1. 如果我仍然需要将Application传递给ViewModel的ctor,AndroidViewModel将如何帮助我?
  2. 同样,如果我需要传递Application,为什么我需要AndroidViewModel?我可以只使用ViewModel并将其传递给Application
android android-architecture-components
2个回答
3
投票

如果您提供自己的工厂,则可以将所需的任何内容传递给常规ViewModel对象,对此您是正确的。

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


2
投票

您可以在不扩展ViewModel的情况下编写自定义AndroidViewModel,并且在功能上是相同的。

默认情况下只有差异ViewModelFactory检查ViewModel是否为AndroidViewModel的实例,并自动调用传递给Application上下文的单参数构造函数。


0
投票

[通常,最好避免在Context中使用ViewModel(即Android特定功能),使其包含独立于Android的业务逻辑。

因此,如果您的ViewModel使用应用上下文,则最好通过子类化AndroidViewModel使其明确。

© www.soinside.com 2019 - 2024. All rights reserved.