如何同时显示多个EditText的错误提示?
如何同时显示多个EditText的空输入错误提示?
我需要对文本输入进行校验,但不知如何同时显示多个EditText的错误提示?目前仅能显示一个为空EditText的错误提示,我希望所有为空的EditText都能同时显示错误提示。
以下是我的代码:
binding.btnCalculate.setOnClickListener() { val panjang = binding.etPanjang.text val lebar = binding.etLebar.text val tinggi = binding.etTinggi.text if (TextUtils.isEmpty(binding.etPanjang.text)) { binding.etPanjang.setError("Field must be filled") } else if (TextUtils.isEmpty(binding.etLebar.text)) { binding.etLebar.setError("Field must be filled") } else if (TextUtils.isEmpty(binding.etLebar.text)) { // 此处存在错误,应判断tinggi而非lebar binding.etTinggi.setError("Field must be filled") } else { val action = InputFragmentDirections.actionInputFragmentToOutputFragment( panjang.toString().toInt(), lebar.toString().toInt(), tinggi.toString().toInt() ) findNavController().navigate(action) } }
问题原因
你当前用的else if是互斥逻辑:只要第一个条件成立,后续判断就会跳过,所以只会显示第一个为空输入框的错误,无法同时校验所有输入。
解决方法
把互斥的else if改成独立的if判断,逐个检查每个EditText;同时加一个校验通过的标志位,只有所有输入都合法时才执行跳转:
binding.btnCalculate.setOnClickListener() { val panjang = binding.etPanjang.text val lebar = binding.etLebar.text val tinggi = binding.etTinggi.text // 重置所有输入框的错误提示,避免上次校验的错误残留 binding.etPanjang.error = null binding.etLebar.error = null binding.etTinggi.error = null var isValid = true // 独立校验每个输入框,所有为空的都会显示错误提示 if (TextUtils.isEmpty(panjang)) { binding.etPanjang.setError("Field must be filled") isValid = false } if (TextUtils.isEmpty(lebar)) { binding.etLebar.setError("Field must be filled") isValid = false } if (TextUtils.isEmpty(tinggi)) { binding.etTinggi.setError("Field must be filled") isValid = false } // 所有输入合法时才执行页面跳转 if (isValid) { val action = InputFragmentDirections.actionInputFragmentToOutputFragment( panjang.toString().toInt(), lebar.toString().toInt(), tinggi.toString().toInt() ) findNavController().navigate(action) } }
额外优化说明
- 校验前重置错误提示,避免用户修正部分输入后旧错误还显示。
- 直接用已定义的变量
panjang、lebar、tinggi判断,不用重复调用binding.etXX.text,代码更简洁。 - 修复了你原代码中第三个判断条件的错误(误将
tinggi写成lebar)。
内容的提问来源于stack exchange,提问作者munovrizall
相关产品推荐
相关产品推荐

