TL;DR
如何处理主动更改数据的Activity(例如通过EditText)?在旋转时,我是否应该在SavedInstanceState中保存它们的状态,并且只有在所有字段准备就绪时才使用ViewModel,或者是否有一种方法使ViewModel负责检查/保持/使用UI的数据?
问题
我正在使用谷歌的Arch.组件开发我的应用程序,在编写最新的类时,我注意到我不太确定处理来自Activity表单的数据的最佳实践是什么。
示例
我有一个由标题、描述、位置、类型组成的POJO。
我有一个具有四个EditText的Activity:title_et
、description_et
、location_et
、type_et
。
我的ViewModel可以通过Repository(此处无关)在调用sendObject
函数时向数据库发送对象。
我现在的做法
Activity拥有mTitle
、mDescription
、mLocation
、mType
。
在旋转时,Activity会将所有EditText值保存在savedInstanceState
bundle中,并重新加载它们以填充视图。
当用户想要发送对象时,点击按钮,Activity在必要的检查后调用viewModel.sendObject(mTitle, mDescription, mLocation, mType)
函数。
这种方法存在的问题
Activity负责保存/检查EditText的所有数据,基本上使ViewModel只负责与Repository交互。
我想要实现的目标
理想情况下,我希望将Activity仅限于UI,将一切委托给ViewModel。
这样我就可以调用sendObject()
,而ViewModel已经拥有所需的所有数据。
LiveData的情况
现在,ViewModel只有一个LiveData实例,在其中有一个Resource(取自此处),用于“告诉”Activity新数据已到达或发生错误。
这种方法在所有仅从网络接收数据并显示它们的Activity中都有效。当我想同步来自Activity的数据时,我该怎么办?我为每个字段使用一个LiveData,并使用它来显示潜在的错误吗?
我已阅读了大多数示例,但那里的所有Activities都是被动的。
结论
感谢任何花时间帮助的人。