MVVM+Kotlin+Databinding最佳实践
MVVM+Kotlin+Databinding best practice
我正在 MVVM+Kotlin+Databinding 上构建一个应用程序,我遇到了这种情况。
我有 LoginFragment
,其中有一个 phone 数字编辑文本和一个按钮,
现在我需要在用户单击按钮时检查 phone 数字是否为空。
通常我会在我的片段中使用这段代码来做到这一点。
if(!binding!!.phone.text.isEmpty()) {
//do something
}
但根据 experts,我的视图不应该知道任何关于业务逻辑的信息,因此我需要在我的 viewModel 中进行此检查。
那么实现这一目标的最佳方法应该是什么?
以下是实现这一目标的投注实践(从我的角度来看):
在您的布局中,将文本观察器和文本添加到您的 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
。如果您使用 !!
使一个可能的可为 null 的对象看起来像它不可为 null(即使您 100% 确定它是)- 您做错了什么。
我正在 MVVM+Kotlin+Databinding 上构建一个应用程序,我遇到了这种情况。
我有 LoginFragment
,其中有一个 phone 数字编辑文本和一个按钮,
现在我需要在用户单击按钮时检查 phone 数字是否为空。
通常我会在我的片段中使用这段代码来做到这一点。
if(!binding!!.phone.text.isEmpty()) {
//do something
}
但根据 experts,我的视图不应该知道任何关于业务逻辑的信息,因此我需要在我的 viewModel 中进行此检查。 那么实现这一目标的最佳方法应该是什么?
以下是实现这一目标的投注实践(从我的角度来看):
在您的布局中,将文本观察器和文本添加到您的 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
。如果您使用 !!
使一个可能的可为 null 的对象看起来像它不可为 null(即使您 100% 确定它是)- 您做错了什么。