我正在MVVM + Kotlin + Databinding上构建一个应用程序,我有这种情况,我被困在。
我有LoginFragment
,其中包含电话号码编辑文字和按钮,
现在我需要在用户点击按钮时检查电话号码是否为空。
通常我会通过在我的片段中使用此代码来实现这一点。
if(!binding!!.phone.text.isEmpty()) {
//do something
}
但根据experts,我的观点不应该对业务逻辑有任何了解,因此我需要在viewModel中进行此检查。 那应该是实现这个目标的最佳途径呢?
答案 0 :(得分:2)
这是实现这一目标的赌注(从我的观点来看):
在您的布局中,将文字观察者和文字添加到EditText
android:text="@{view_model.phone}"
app:addTextChangedListener="@{view_model.phoneWatcher}"
点击按钮的方法
android:onClick="@{() -> view_model.save()}"
在ViewModel
内,您将拥有文本可观察性和观察者
val phone = ObservableField<String?>()
val phoneWatcher = object : TextWatcherAdapter() {
override fun afterTextChanged(s: Editable?) {
phone.set(s?.toString())
}
}
现在,您可以在ViewModel
fun save() {
if (phone.get()?.isNotEmpty == true) {
// TODO: do something
}
}
另请注意,最好避免在Kotlin中执行类似binding!!.phone
的操作。如果你正在使用!!
使可能的可空对象看起来像是不可空的(即使你100%确定它是) - 你做错了。< / p>