android - 如何在不使用数据绑定的情况下让 EditText 观察 ViewModel 的 LiveData 并将用户输入转发到 ViewModel
问题描述
我试图想出一种方法让 EditText 更新 ViewModel 的数据并同时观察该数据的任何更改(例如,通过操作数据库带来的更改)。有没有办法在不使用数据绑定库的情况下做到这一点?
我在简单地使用 MutableLiveData 时面临的主要问题如下:
当用户在 EditText 中输入文本时,TextWatcher 会戳 ViewModel 以更新其数据,这反过来会将新文本设置为 MutableLiveData 对象。因为 EditText 正在观察 LiveData,所以触发了 onChange 并相应地设置了 EditText 的文本,这反过来又会触发 TextWatcher 再次创建无限循环。
解决方案
我也遇到了这个问题,因为我不喜欢数据绑定库。我按照@kAliert 所说的那样做了,但我ViewModel
的逻辑是保留在那里。我只是在ViewModel
. 它运作良好。
fun editTextChanged(newText: String) {
if (newText == textLiveData.value) {
return
}
}
推荐阅读
- r - R EML:system.file 为空且 set_methods setwd(wd) 中的错误:无法更改工作目录
- purescript - Purescript:如何解析查询字符串(在 url/uri 中)
- c++ - 如何在 CPLEX(音乐会 C++)中找到这个数组的总和?
- docker - 在 arm64 上运行 amd64 docker 镜像
- javascript - 空手道 UI-空手道是否与 ngWebDriver 集成?
- java - 添加 LTV 签名后某些 pdf 文件已损坏
- php - strftime 给我返回空字符串
- c# - 为什么 Entity Framework Core 一对多关系只创建左连接?IsRequired 不起作用
- azure-logic-apps - 具有 Datalake API 连接的逻辑应用程序的 ARM 模板部署
- avro - 使用 Spring Cloud Stream 处理 Avro 反序列化异常