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

时间:2015-10-20 03:33:12

标签: android android-edittext onfocus

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

Pic 1

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

Pic 2

我希望感叹号在远离EditText行的任何焦点变化时消失。有关如何修复的任何想法?

部分活动文件:

...
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");
    }
}

2 个答案:

答案 0 :(得分:1)

使用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);
    }
});

答案 1 :(得分:0)

在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

            }
        });