我在我的应用中使用 Android架构组件。我正在处理的用例实际上非常简单。
考虑一个简单的Todo应用程序,其中todo-detail片段正在观察来自ViewModel的实时数据,该ViewModel持有当前打开的todo-item的实例。
由于此片段处于编辑模式,因此用户可以编辑该项目的属性。
使用案例1
其中有一个带有灰色标记图标的图像按钮。当用户点击它时,该项目被标记为“高优先级”并将标志颜色更改为红色。
为了实现这一点,我将视图模型实例上的属性viewModel.value.isHighPriority
更新为true
,这会导致数据发生更改,从而导致片段监听它。如果viewModel.value.isHighPriority = true
,片段会显示标记颜色红色。所以基本上来自视图的UI事件会回到视图,导致它更新。
使用案例2
考虑一个待办事项的标题。它显示在Android的EditText
中。在这种情况下,如何使用用户在框中键入的数据更新视图模型?我当然不希望上edit编辑文本的文本更改事件并按字符处理。这似乎是对我不必要的黑客攻击。
这一切让我重新思考我处理更新的方式,以便从视图中查看模型的实时数据。如果我正在做的事情(双向数据绑定)不是一个好习惯,请建议我如何处理视图接收UI事件的情况,该事件导致视图本身正在呈现的数据更新。
答案 0 :(得分:0)
如果您尝试根据用户输入的内容更新视图模型,则必须拥有文本观察器。即使没有视图模型,也没有别的办法。如果您保留了像提交这样的按钮,则可以根据onClick更新视图模型。
实际上,如果你想要ViewModel的真正本质,你需要将它与Databinding一起使用。然后,您可以直接从布局中调用视图模型的方法,而不需要知道大部分活动或片段!
例如,在您的情况下,您可以在布局中调用视图模型中的方法onPressed(Item item)
,然后您可以将可观察的优先级值设置为Priority.HIGH。布局会自动更改。视图不需要知道这一点。
即使您不使用数据绑定,在第一种情况下考虑是否必须按下按钮进行api调用,并且在成功时您必须更新视图。没有视图模型会不会很麻烦?