首页 > 解决方案 > 如何在不使用数据绑定的情况下让 EditText 观察 ViewModel 的 LiveData 并将用户输入转发到 ViewModel

问题描述

我试图想出一种方法让 EditText 更新 ViewModel 的数据并同时观察该数据的任何更改(例如,通过操作数据库带来的更改)。有没有办法在不使用数据绑定库的情况下做到这一点?

我在简单地使用 MutableLiveData 时面临的主要问题如下:

当用户在 EditText 中输入文本时,TextWatcher 会戳 ViewModel 以更新其数据,这反过来会将新文本设置为 MutableLiveData 对象。因为 EditText 正在观察 LiveData,所以触发了 onChange 并相应地设置了 EditText 的文本,这反过来又会触发 TextWatcher 再次创建无限循环。

标签: androidandroid-architecture-components

解决方案


我也遇到了这个问题,因为我不喜欢数据绑定库。我按照@kAliert 所说的那样做了,但我ViewModel的逻辑是保留在那里。我只是在ViewModel. 它运作良好。

fun editTextChanged(newText: String) {
    if (newText == textLiveData.value) {
        return
    }
}

推荐阅读