2

我在我的应用程序中使用Android 架构组件。我正在处理的用例实际上非常简单。

考虑一个简单的 Todo 应用程序,其中 todo-detail 片段正在观察来自 ViewModel 的实时数据,该 ViewModel 包含当前打开的 todo-item 的实例。

由于此片段处于编辑模式,它将允许用户编辑项目的属性。


用例 1

有一个带有灰色标志图标的图像按钮。当用户点击它时,该项目被标记为“高优先级”并将标志的颜色更改为红色。

为了实现这一点,我将属性更新viewModel.value.isHighPrioritytrue视图模型实例上,这会导致数据发生变化,从而导致片段监听它。如果 ,片段显示标志颜色红色viewModel.value.isHighPriority = true。所以基本上来自视图的 UI 事件会循环回到导致它更新的视图。

用例 2

考虑一个待办事项的标题。它显示在 Android 的EditText. 在这种情况下,如何使用用户在框中输入的数据更新视图模型?我当然不想劫持编辑文本的文本更改事件并逐个字符处理。这对我来说似乎是不必要的黑客攻击。


这整件事让我重新思考我处理更新以从视图中查看模型的实时数据的方式。如果我正在做的事情(2 路数据绑定)不是一个好的做法,请建议我如何处理视图接收 UI 事件导致更新视图本身当前呈现的数据的情况。

4

1 回答 1

0

如果您尝试根据用户输入的内容更新视图模型,则必须有文本观察器。即使没有视图模型,也没有其他方法。如果您保留了提交之类的按钮,则可以根据您的 onClick 更新您的视图模型。

实际上,如果您想要 ViewModel 的真正本质,您需要将它与 Databinding 结合使用。然后你可以直接从你的布局中调用你的视图模型的方法,而不需要活动或片段知道它的大部分内容!

例如,在您的情况下,您可以onPressed(Item item)从布局中调用视图模型中的方法say,然后将可观察对象的优先级值设置为 Priority.HIGH。布局会自动更改。视图不需要对此一无所知。

即使您不使用数据绑定,请考虑在第一种情况下是否必须在按下按钮时进行 api 调用,并且在成功时必须更新视图。没有视图模型会不会很乱?

于 2018-06-12T13:20:50.893 回答