在我的片段中,我有下一段代码:
etAuthorName.doAfterTextChanged {
viewModel.quoteAuthor.value = it?.toString()
}
viewModel.quoteAuthor.observe(this, Observer<String> {
if (etAuthorName.text.toString() != it) {
etAuthorName.setText(it)
}
})
如何将此逻辑:if(etAuthorname.text.ToString()!=it)
提取到我的ViewModel?
您可以使用Transformations.DistincTuntilChanged
在viewmodel内部添加此内容,并在您的片段内部侦听observer quoteAuthor
val authorDistinct = Transformations.distinctUntilChanged(quoteAuthor)
在这种情况下,您可以使用数据绑定,请点击以下网址了解更多信息:https://developer.android.com/topic/libraries/data-binding
编辑:您可以尝试如下操作:
在ViewModel类中:
@get:Bindable
var bindetAuthorName: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.bindetAuthorName)
}
get() = field
fun comparison(){
if(bindetAuthorName != quoteAuthor){
bindetAuthorName = quoteAuthor
}
}
在xml edittext/textview中:
<Edittext
.....
android:text="@={viewModel.bindetAuthorName}"/>
并且,无论何时更新quoteAuthor值,都可以调用comparison()。 我希望这能帮上忙!