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
相关产品推荐
相关产品推荐

