gpt4 book ai didi

android - 如何从 Android 中的 View 更新 View 模型

转载 作者:行者123 更新时间:2023-11-29 02:31:51 25 4
gpt4 key购买 nike

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

考虑一个简单的待办事项应用程序,其中待办事项详细信息 fragment 正在观察来自包含当前打开的待办事项实例的 ViewModel 的实时数据。

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


用例 1

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

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

用例 2

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


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

最佳答案

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

实际上,如果您想要 ViewModel 的真正本质,您需要将它与数据绑定(bind)结合使用。然后您可以直接从您的布局中调用您的 View 模型的方法,而无需 Activity 或 Fragment 了解其中的大部分内容!

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

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

关于android - 如何从 Android 中的 View 更新 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49265873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com