【发布时间】:2018-11-03 02:39:10
【问题描述】:
我正在 MVVM+Kotlin+Databinding 上构建一个应用程序,我遇到了这种情况。
我有LoginFragment,它有一个电话号码edittext 和一个按钮,
现在我需要检查用户单击按钮时电话号码是否为空。
通常我会通过在我的片段中使用此代码来做到这一点。
if(!binding!!.phone.text.isEmpty()) {
//do something
}
但根据experts,我的视图不应该对业务逻辑一无所知,因此我需要在我的视图模型中进行此检查。 那么实现这一目标的最佳方法应该是什么?
【问题讨论】:
-
如果您直接使用双向绑定到 ViewModel 的字段(LiveData/ObservableField),那么您不需要直接从绑定本身访问视图,我认为 - 事实上,那就是for 最有可能是什么数据绑定,而不仅仅是生成视图引用:p
-
好吧,我也有点困惑,我的意思是有些人正在让他们的 viewmodel 扩展 BaseObservable,而我正在扩展 viewModel,所以我不能使用可绑定此外与 observableFields 我我只能在数据更改时更新 ui,但我还需要在单击按钮时从 edittext 获取文本,正确的方法是什么?
-
您总是从编辑文本中获取文本,这就是数据绑定的魔力。因此,您无需再访问视图即可获得它。使用最新的数据绑定,ViewModel 应该公开 LiveData,并且 Binding 应该有一个
setLifecycleOwner方法,您可以设置 ViewModel 所属的任何人并且它应该可以工作:如,您应该能够直接在 XML 中使用LiveData<String>字段例如,如果ViewModel被指定为数据/变量,则绑定。 -
我会给出一个真正的答案,但我还没有针对这种情况的现成代码示例,我只是知道它应该是什么样子:D
标签: android mvvm kotlin android-databinding