我正在使用setError
方法显示当该字段的焦点移开时,EditText
字段是否被错误填充。如果它正确填充,我会显示一个图标:drawable.validated
这是我的代码:
@Override
public void afterTextChanged(Editable s) {
zip.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (isValidZip(zip.getText().toString())) {
zip.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.validated, 0);
} else {
zip.setError(getString(R.string.zip_error));
}
}
}
});
问题是,setError
方法干扰了我手动设置的图标。因此即使验证字段,我也看不到drawable.validated
图标。
有关何时收到错误的详细信息:
CASE 1 我在第一次正确填写EditText字段 - >我改变了该领域的焦点 - >我可以看到validated
图标。请参阅以下屏幕截图:
案例2 我填写EditText
邮政编码错误 - >我将焦点更改为手机号码字段 - >我在zip字段中看到错误 - >返回到zip字段并正确填写。 zip中的错误消失 - >将焦点改为移动号码字段 - >现在,即使填写正确,我也无法在zip字段中看到VALIDATED
图标:
drawable.validated
是蓝色标记。
12345
是zip
字段
可能是什么问题以及如何解决这个问题?
答案 0 :(得分:0)
首先,为什么你setOnFocusChangeListener
每次文字发生变化,你都不需要这样做,你可以设置一次。
我刚刚创建了测试项目并对其进行测试,工作正常
mEditText = (EditText) findViewById(R.id.edit_text_input);
mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (isValidZip(mEditText.getText().toString())) {
mEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_validated, 0);
} else {
mEditText.setError(getString(R.string.error_invalid_zip));
}
}
}
});
private boolean isValidZip(String s) {
return s.equals("correct");
}
正常工作。我认为您的问题是每次文本更改时都要设置更改侦听器。
您可以尝试我的应用程序,看它是否正常https://dropmefiles.com/a9ydI
这里是完整源代码的链接