【发布时间】:2018-11-25 08:18:25
【问题描述】:
我正在使用 2 路数据绑定从我的 ViewModel 中使用 EditText 中设置的字符串更新 LiveData String 对象:
<android.support.design.widget.TextInputEditText
android:id="@+id/writeReviewTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.liveReviewTitle}"
/>
因此,据我了解,每当 EditText 中的文本发生更改时,ViewModel 的 liveReviewTitle 属性都会更新。我认为这是通过使用 TextWatcher 或图书馆为我处理的某种侦听机制而发生的。我还认为,当需要更新文本时,会调用它的setter。 似乎并非如此!当文本发生变化时,我需要在我的 ViewModel 中做更多的事情,因此我为liveReviewTitle 实现了一个自定义的setter,但它没有被调用(我尝试过调试)。
这是ViewModel 类中的样子:
var liveReviewTitle: MutableLiveData<String> = MutableLiveData()
set(value) {
field = value
customLogicHere()
}
尝试调试此setter,但它似乎从未被调用!这里发生了什么?感觉有点混乱。文字正在更新中,保存在ViewModel中,只是setter没有被调用。
【问题讨论】:
-
@NSimon 该示例未使用库提供的真正的 2 路数据绑定。开发人员正在创建侦听器并自行附加它们,这是我想避免的,因为库应该处理这个问题。
标签: android data-binding kotlin android-databinding android-livedata