为什么我们需要为 DataBinding 和 LiveData 扩展“ViewModel()”来创建 LiveData 对象

Pur*_*iya 1 android kotlin android-livedata mutablelivedata

无需ViewModel()仅使用简单的类进行扩展,我就可以实现 LiveData 和 DataBinding 示例,但我在 google 开发人员文档中显示了扩展ViewModel()以创建 LiveData 对象。那么为什么我们需要扩展它呢?

https://developer.android.com/topic/libraries/architecture/livedata

Sam*_*hen 5

var a = 10如果您在Fragment或中创建一个变量Activity,然后在某处更改它(例如:单击按钮),现在它变为50,然后您旋转屏幕(称为配置更改),您会注意到它再次a变为10。有时听起来很烦人吧?ViewModel就是为了解决这个问题而设计的。

您在其中声明的任何变量都ViewModel不会受到Configuration Change的影响。

当然,您必须扩展(继承)您的班级ViewModelAndroidViewModel获得此能力。但如果您不需要此功能,则无需扩展它们。


以下显示了将导致配置更改的情况:

  1. 旋转屏幕

  2. 更改系统语言

  3. 插入物理键盘

  4. 连接到鼠标

要点:配置更改后,Activity 将被重新创建,因此数据可能会丢失。