为什么我们需要为 DataBinding 和 LiveData 扩展 ```ViewModel()``` 来创建 LiveData 对象
Why we need to extend ```ViewModel()``` for DataBinding and LiveData to create LiveData object
无需扩展 ViewModel()
只需使用简单的 class 我就能实现 LiveData 和 DataBinding 示例,但我在 google 开发人员文档中展示了扩展 ViewModel()
以创建对象LiveData.So 为什么我们需要扩展它?
https://developer.android.com/topic/libraries/architecture/livedata
如果您在 Fragment
或 Activity
中创建了一个变量,例如 var a = 10
,然后您将它更改到某处(例如:单击按钮),现在它变为 50
,然后旋转屏幕(称为 配置更改),您会注意到 a
再次变为 10
。有时听起来很烦人吧? ViewModel
就是为了解决这个问题而设计的。
Any variable you declare inside ViewModel
will not be affected by Configuration Change.
当然,您必须从 ViewModel
或 AndroidViewModel
扩展(继承)您的 class 才能获得此能力。但是如果你不需要这个功能,你不需要扩展它们。
以下显示了将导致配置更改的情况:
旋转屏幕
更改系统语言
插入物理键盘
已连接鼠标
要点:配置更改后,将重新创建Activity,因此数据可能会丢失。
无需扩展 ViewModel()
只需使用简单的 class 我就能实现 LiveData 和 DataBinding 示例,但我在 google 开发人员文档中展示了扩展 ViewModel()
以创建对象LiveData.So 为什么我们需要扩展它?
https://developer.android.com/topic/libraries/architecture/livedata
如果您在 Fragment
或 Activity
中创建了一个变量,例如 var a = 10
,然后您将它更改到某处(例如:单击按钮),现在它变为 50
,然后旋转屏幕(称为 配置更改),您会注意到 a
再次变为 10
。有时听起来很烦人吧? ViewModel
就是为了解决这个问题而设计的。
Any variable you declare inside
ViewModel
will not be affected by Configuration Change.
当然,您必须从 ViewModel
或 AndroidViewModel
扩展(继承)您的 class 才能获得此能力。但是如果你不需要这个功能,你不需要扩展它们。
以下显示了将导致配置更改的情况:
旋转屏幕
更改系统语言
插入物理键盘
已连接鼠标
要点:配置更改后,将重新创建Activity,因此数据可能会丢失。