Android MVVM 模式 - 用户输入

标签 android mvvm android-livedata

这是一个一般性的设计问题,我只是想尽一切办法解决这个问题。

假设我有一个本地数据库。我有一个用例可以从该数据库中检索一些信息并从中构建模型。这个模型有最小值、最大值和用户选择的值。然后,我将此模型提供给我的 View 模型, View 模型又将其放入实时数据对象中,并告诉我一个 fragment 来更新 UI。

我的 fragment ,然后获取这个实时数据对象并构建一个包含值的表单,包括最小值和最大值,以及用户输入的值。然后,用户可以更改多个字段(通过选择器、日期选择器),然后点击保存按钮保存整个表单。

我想知道在用户填写表单时更新数据的最佳方式是什么。最初我认为在输入每个字段时,我应该更新我的实时数据对象,这样如果屏幕被破坏或旋转,我的 UI 将根据我更新的实时数据对象重建。

但是,有人告诉我,我应该将值保存在变量中,直到用户单击保存按钮。然后我应该更新实时数据对象并将该数据存储在数据库中。在这种情况下,我想我会使用 SaveInstanceState 来保留用户输入的值。

我知道可能没有明确的答案,但我正在寻找这种模式的最佳实践。如果您需要更多信息,请与我们联系。当数据在后端发生变化时,我已经看到很多使用 LiveData 的 MVVM 示例,但当有用户输入要处理时,我看到的示例并不多。

任何建议将不胜感激。谢谢。

最佳答案

将用户选择存储为使用 Activity 上下文从 ViewModelProvider 创建的 ViewModel 类中的数据绑定(bind)字段。即使从方向更改重新创建 Activity ,以这种方式检索的 ViewModel 实例仍然存在。

关于Android MVVM 模式 - 用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52703478/

相关文章:

android - 创建 AccessibilityEventService 时如何为您的应用设置辅助功能设置说明?

java - 如何在 Saucelabs 中上传一次文件并将其用于其他测试

c# - 跳过导航历史记录中的 View

mvvm - 如何根据.net maui 中的条件进行绑定(bind)?

wpf - 设置 WpfToolkit 数据网格列编辑样式

Android - 根据 ViewModel 中的选定项目更改过滤 LiveData 列表

java - 应用程序关闭后广播接收器仍在运行 - Android

android - 同时打开android前置摄像头和后置摄像头

android - 我应该让 AsyncTask 成为 LiveData 或 Repository 类的成员 - 作为 Loader 的替代品

java - MediatorLiveData 多次调用观察者错误