AndroidViewModel与将Application上下文传递给ViewModel的区别

7

文档说明:

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

代码示例:

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

两个问题:

  1. 如果我需要将Application传递到ViewModel的构造函数中,AndroidViewModel如何帮助我?
  2. 同样,如果我需要传递Application,我为什么需要AndroidViewModel?我可以使用ViewModel并将其传递Application

1
如果我需要将Application传递给ViewModel的构造函数,AndroidViewModel如何帮助我?-- 您不会将Application传递给ViewModel构造函数,因为您没有调用ViewModel构造函数。而是使用了一个工厂。 - CommonsWare
2个回答

8

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

但是,如果您正在使用默认的工厂,源代码显示,默认工厂在您的ViewModel扩展AndroidViewModel时为您填充Application实例。


2

您可以编写自定义的 ViewModel,而无需扩展 AndroidViewModel,其功能完全相同。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接