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

9个EditText重复值校验实现:输入重复数字时提示错误

解决EditText重复输入检测的优化方案

嗨,我来帮你搞定这个9个EditText的重复值检测问题!你的现有思路是对的,但目前的代码存在大量重复逻辑,每个EditText都写一遍监听会让代码变得臃肿且难以维护,咱们来优化一下:

第一步:统一管理所有EditText

先把需要检测的EditText全部放到一个集合里,后续遍历检查会更高效:

// 在你的Activity/Fragment初始化阶段创建这个列表
List<EditText> editTextList = new ArrayList<>();
editTextList.add(et0);
editTextList.add(et1);
editTextList.add(et2);
editTextList.add(et3);
editTextList.add(et4);
editTextList.add(et5);
editTextList.add(et6);
editTextList.add(et7);
editTextList.add(et8);
// 如果你实际是et0到et9,补充对应的EditText即可

第二步:编写通用的焦点变化监听

写一个可复用的OnFocusChangeListener,所有EditText共用这一段逻辑,不用重复写9遍:

View.OnFocusChangeListener duplicateCheckListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        EditText currentEt = (EditText) view;
        String currentText = currentEt.getText().toString().trim();
        
        // 获取焦点时保留你的键盘关联逻辑
        if (hasFocus) {
            InputConnection ic = currentEt.onCreateInputConnection(new EditorInfo());
            keyboard.setInputConnection(ic);
            return;
        }

        // 输入为空直接跳过检测
        if (currentText.isEmpty()) {
            return;
        }

        // 遍历所有EditText,排除当前控件本身,检查是否有重复值
        boolean isDuplicate = false;
        for (EditText et : editTextList) {
            if (et != currentEt && currentText.equals(et.getText().toString().trim())) {
                isDuplicate = true;
                break;
            }
        }

        // 检测到重复时执行错误处理
        if (isDuplicate) {
            currentEt.setError("you can use " + currentText + " only once");
            currentEt.setText("");
            afficheerr1(); // 调用你的错误提示方法
        }
    }
};

第三步:给所有EditText绑定监听

最后循环给集合里的每个EditText设置刚才的通用监听:

for (EditText et : editTextList) {
    et.setOnFocusChangeListener(duplicateCheckListener);
}

优化后的优势

  • 代码复用:修改检测规则时只需改动一处逻辑,不用逐个修改9个EditText的监听
  • 逻辑清晰:把重复检测的核心逻辑封装在一起,可读性和可维护性大幅提升
  • 扩展性强:后续增减EditText,只需调整editTextList的初始化内容即可

这样就能完美实现你想要的功能:任何EditText输入值后,失去焦点时会自动检查该值是否在其他EditText中存在,存在则显示错误提示并清空内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:17