EditText setПовідомлення про помилку не очищається після введення


75

Гаразд, тому у мене є лише поле 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 не порожній?

Відповіді:


144

Вставте у вашу дужку else playerName.setError(null), яка видалить помилку.


12
Це видалить помилку при натисканні кнопки, але її слід видалити, коли введення тексту змінюється. Це повинно робити це автоматично відповідно до документів : "Значок і повідомлення про помилку буде скинуто до нуля, коли будь-які ключові події спричинять зміни тексту TextView."
благдібла

4
Я бачу те саме при натисканні клавіші видалення, але воно стирається при наборі нового тексту - Galaxy Nexus 4.3. Не помічав у попередній ОС. Отже, я скажу, що в Android помилка.
Sofi Software LLC,

Здається, Backspace очищає повідомлення про помилку на моєму телефоні 2.3.3, але не на 4.1.1 з тим самим файлом .apk та бібліотекою підтримки
eugene

Ви можете використовувати метод TextWatcherі замінити afterTextChanged.
MChaker

1
@blahdiblah ви робите гарне спостереження. Але не думайте, що це помилка .. Просто Google насправді пошкодив доко. У другому реченні сказано, що повідомлення про помилку буде встановлено на "нуль", маючи на увазі, що піктограма все ще активна. В останньому реченні сказано, що піктограма та повідомлення очищаються (тобто скидаються) лише тоді, коли setError (null). Google міг би вкласти ще 5 хвилин, щоб написати це ... можливо, занадто зайнятий підрахунком грошей і роботою на самокерованих автомобілях.
angryITguy

53

Документація API: "Значок і повідомлення про помилку буде скинуто до нуля, коли будь-які ключові події спричинять зміни тексту TextView." Хоча це не так - і тому ми можемо розцінювати це як помилку.

Якщо ви використовуєте inputType, наприклад textNoSuggestions, textEmailAddress, textPassword, помилка не встановлюється після введення символу. Майже як задокументовано, але знову ж не зовсім так - коли ви видаляєте символ, помилка залишається. Здається, просте обхідне рішення з addTextChangedListener і setError (null) може досягти обіцяної поведінки.

Крім того, є повідомлення про програш ікон на Android 4.2. Тому використовуйте обережно.


7
Цю відповідь слід поставити вище - вона надає дуже цінну інформацію.
Росомак

1
Це дійсно заплутано, але не помилка ... просто досить поганий doco .... див. Мій коментар у схваленій відповіді.
angryITguy

25.1.0+ все ще відчуває помилку.
Рейчел

1
@giulio Це помилка. Наприклад, у моєму телефоні проблема виникає лише у деяких inputTypeі лише в тому випадку, якщо я набираю одну символіку. Після другого введення символу EditTextповодиться як слід, і помилка зникає. Ця непослідовність більше нагадує помилку.
Густаво,

12

Спробуйте цього слухача:

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

Тест на довжину> 0 здається необов’язковим.
Євген

Це тому, що він сказав "видалити помилку, як тільки EditText не буде порожнім". Якщо ви не зробите цей тест, він видалить помилку з порожнього поля, якщо користувач набере символ і видалить його.
Ян Зіссе

3

Якщо ви хочете приховати повідомлення про помилку одним із способів, застосуйте onclicklistener у полі редагування, а потім

editTextName.setOnClickListener(new OnClickListener() {

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

23
Великі поля болять мені в очах! але серйозно ... editTextNameзамість цього спробуйте .
fernandohur

Це працює лише в тому випадку, якщо користувач EditTextnameчітко торкається його лінії ... Менше шансів це статися. (О, від цього імені мене
зригує

2

Нижче код працював для мене

@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) Видалить додаткове заповнення.


1
Щоб прочитати повне пояснення щодо використання вершкового масла, перейдіть тут .
XME

0

Додайте TextWatcher до вашого EditText і onError, покажіть своє повідомлення про помилку, використовуючи 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.