【发布时间】:2020-11-26 11:35:11
【问题描述】:
我开始在 Android 上使用 LiveData 学习 MVVM。我认为显示和更新基本数据对我来说很清楚。我很难找到最佳实践的主题是控制 UI。
假设我有一个基本的用户界面,例如一个表单。它有几个 EditTextViews 来输入数据。最后它还有一个开关。如果它是ON,则会显示更多的 EditTextViews 来填充。当它OFF时,它们当然消失了。
我的问题是在哪里实现这个逻辑?
-
在活动/片段代码中?然后业务逻辑将涉及到 MVVM 的 VIEW 部分(我觉得不太好)。
-
在视图模型中?然后业务逻辑将存在于一个,比如说,数据缓存中。这样我就必须在 ViewModel 中创建一堆
booleangetter 来计算单独视图可见性的值。然后在我的 Activity 中的 LiveData 更改订阅块中,我需要读取所有这些值并一一设置视图的可见性。 -
在单独的 Service/Helper/Util 类中?这与 #2 的解决方案相同,只是从 ViewModel 中提取的逻辑。
这里的最佳做法是什么?不过,同样的问题可以提出用户输入验证的主题(我猜这些领域有很多)。
【问题讨论】:
-
开/关状态是否会影响 UI 可见性以外的其他内容?如果没有 UI,它在业务逻辑中的作用是什么?
-
当它打开时,业务逻辑分别填充 POJO 中的字段,当它关闭时,相同的字段将被留空/清除。例如,如果Under Age开关打开,用户必须输入法定代表人的数据(母亲姓名等),这些数据需要保存。
-
按照我的理解,它是由 UI(用户单击按钮)驱动的,而不是从其他 POJO 属性派生的,例如出生日期VS现在?如果用户打开按钮,填写字段并将其关闭,POJO 应该有空值,无论 UI 中的字段不是空的,对吗?
-
正确。是的,我现在知道这个例子不是最好的。如您所述,在大多数用例中,必须从出生日期和当前日期计算未成年人。这只是一个场景的快速示例,有时需要显示一些 UI 组件,有时需要消失。
标签: android mvvm visibility