android setError方法干扰手动设置图标

时间:2016-02-02 05:59:10

标签: android

我正在使用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图标。请参阅以下屏幕截图:

enter image description here

案例2 我填写EditText邮政编码错误 - >我将焦点更改为手机号码字段 - >我在zip字段中看到错误 - >返回到zip字段并正确填写。 zip中的错误消失 - >将焦点改为移动号码字段 - >现在,即使填写正确,我也无法在zip字段中看到VALIDATED图标:

no-validation symbol shown

drawable.validated是蓝色标记。

12345zip字段

可能是什么问题以及如何解决这个问题?

1 个答案:

答案 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

这里是完整源代码的链接

https://bitbucket.org/CROSP/testedittexterror/commits/all