MVVM + Kotlin +数据绑定最佳实践

时间:2018-05-24 01:36:21

标签: android mvvm kotlin android-databinding

我正在MVVM + Kotlin + Databinding上构建一个应用程序,我有这种情况,我被困在。 我有LoginFragment,其中包含电话号码编辑文字和按钮, 现在我需要在用户点击按钮时检查电话号码是否为空。 通常我会通过在我的片段中使用此代码来实现这一点。

if(!binding!!.phone.text.isEmpty()) {
    //do something
}

但根据experts,我的观点不应该对业务逻辑有任何了解,因此我需要在viewModel中进行此检查。 那应该是实现这个目标的最佳途径呢?

1 个答案:

答案 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>