You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时显示多个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)
    }
}

额外优化说明

  1. 校验前重置错误提示,避免用户修正部分输入后旧错误还显示。
  2. 直接用已定义的变量panjang、lebar、tinggi判断,不用重复调用binding.etXX.text,代码更简洁。
  3. 修复了你原代码中第三个判断条件的错误(误将tinggi写成lebar)。

内容的提问来源于stack exchange,提问作者munovrizall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:15:24