焦点更改后如何删除 setError 感叹号?

How do I delete setError exclamation mark after focus change?

我有一个使用 setError 代码来验证用户输入的 EditText 行。如果 EditText 行留空并且用户尝试离开 Activity,则 setError 消息会按预期显示在 EditText 行下方(图 1)。

一旦用户开始在 EditText 行上添加文本,setError 感叹号和消息就会按预期消失。但是,如果用户只是将焦点从 EditText 行移到另一个 EditText 行,setError 感叹号仍然存在(图 2)。

我希望感叹号在焦点从 EditText 行移开时消失。关于如何修复的任何想法?

部分Activity文件:

...
public void onClickSave(View v) {
    int stringToDo = cEditText.getText().toString().replace(" ", "").length();
    if (stringToDo > 0) {
        cEditText.setError(null);
        Toast saveToast = Toast.makeText(this, "Clicked the SAVE Button", Toast.LENGTH_LONG);
        saveToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        saveToast.show();
    }
    else {
        cEditText.requestFocus();
        cEditText.setError("Add a To Do Item");
    }
}

使用 onFocusChanged 侦听器,并根据焦点状态将错误设置为您需要的任何值。 (null 摆脱它)

cEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // Sets the error message if the EditText has focus and removes it if it doesnt
        cEditText.setError(hasFocus ? "Add a To Do Item" : null);
    }
});

在 onClickSave() 之后的 onCreate() 中添加这个{}

cEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                cEditText.setError(null);

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });