使用DataBinding时如何在XML按钮点击事件中判断EditText为空并设置错误提示
问题原因
你遇到的问题由4个错误用法导致:
- onClick属性不需要双向绑定符号
@=,仅需使用单向绑定标识@{即可,双向绑定仅适用于可双向修改的数据源绑定场景。 - 你使用的三元表达式缺少else分支,DataBinding的表达式规则要求三元运算必须覆盖条件成立、不成立两种场景,不能仅存在单分支逻辑。
- onClick事件的lambda默认参数是被点击的按钮View,不是你要操作的EditText控件,无需额外声明参数,直接通过布局id
name_text即可引用目标输入框。 setError()方法要求传入字符串类型的错误提示参数,你修改后的代码调用时没有传参,自然无法展示提示内容。
解决方案
将你的按钮onClick属性替换为以下代码即可正常运行:
android:onClick="@{()-> { if(TextUtils.isEmpty(name_text.getText().toString())){ name_text.setError("Cannot be empty"); } else { viewModel.saveOrUpdate(); } } }"
如果更习惯用三元表达式写法,也可以用以下代码:
android:onClick="@{()-> TextUtils.isEmpty(name_text.getText().toString()) ? name_text.setError("Cannot be empty") : viewModel.saveOrUpdate()}"
优化建议
按照MVVM架构规范,不建议在XML中写入复杂逻辑,你可以将输入校验逻辑放到ViewModel中实现,XML仅需调用ViewModel的对应方法即可,后续维护会更方便。
内容的提问来源于stack exchange,提问作者Exceptional Man
相关产品推荐
相关产品推荐

