Сообщение EditText setError не очищается после ввода

Итак, у меня есть только поле EditText и кнопка, которая при нажатии запускает AsyncTask.

EditText playerName = (EditText)findViewById(R.id.playerEditText);

if(playerName.getText().toString().length() == 0 )
    playerName.setError("Player name is required!");
else {
    // do async task
}

Проблема заключается в том, что сообщение об ошибке, похоже, не срабатывает даже после ввода правильного текста для поиска. Есть ли способ удалить ошибку, как только EditText не пуст?

Ответ 1

В скобке else поставьте playerName.setError(null), который очистит ошибку.

Ответ 2

Документация по API: "Значок и сообщение об ошибке будут reset равными нулю, если любые события ключа вызывают изменения в тексте TextView". Хотя это не так, и поэтому мы можем считать это ошибкой.

Если вы используете inputType, например textNoSuggestions, textEmailAddress, textPassword, ошибка будет отменена после ввода символа. Почти как задокументировано, но опять же не совсем точно - при удалении персонажа ошибка остается. Кажется, простой обходной путь с addTextChangedListener и setError (null) может достичь обещанного поведения.

Кроме того, есть сообщения о потере значка на Android 4.2. Поэтому используйте с осторожностью.

Ответ 3

Попробуйте прослушиватель:

      playerName.addTextChangedListener(new TextWatcher()
                {
                    public void afterTextChanged(Editable edt){
                        if( playerName.getText().length()>0)
                        {
                             playerName.setError(null);
                        }
                    }

Ответ 4

Если вы хотите скрыть сообщение об ошибке одним способом, вы примените onclicklistener в поле редактирования, а затем

editTextName.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            editTextName.setError(Null)
        }
    });

Ответ 5

Ниже код работал для меня

@OnTextChanged(
            value = R.id.editTextName,
            callback = OnTextChanged.Callback.TEXT_CHANGED)
    public void afterInput(CharSequence sequence) {
        editTextName.setError(null);
        editTextName.setErrorEnabled(false);
    }

'

editTextName.setError(null) сообщение об ошибке.

editTextName.setErrorEnabled(false) дополнительный отступ.

Ответ 6

Добавьте TextWatcher к вашему EditText и onError, покажите свое сообщение об ошибке, используя et.setError(errorMessage) иначе вы можете удалить сообщение об ошибке и значок ошибки, как et.setError(errorMessage) ниже.

// to remove the error message in your EditText
et.setError(null);

// to remove the error icon from EditText.
et.setCompoundDrawables(null, null, null, null);