提问者:小点点

如何将逻辑提取到ViewModel?


在我的片段中,我有下一段代码:

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?


共2个答案

匿名用户

您可以使用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()。 我希望这能帮上忙!