TextInputLayout setErrorEnabled не создает новый объект TextView

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

Пример ошибки

Я установил его с помощью

mTextInputLayout.setError("This field is required"); 

И отключите его

 mTextInputLayout.setError(null); 

Проблема в том, что по-прежнему имеются прокладки пустого объекта TextView, в котором отображается сообщение об ошибке. Поэтому я попытался полностью отключить ошибку при настройке

 mTextInputLayout.setErrorEnabled(false); 

И он работает и выглядит отлично, НО я не могу его снова включить. При звонке

 mTextInputLayout.setErrorEnabled(true); mTextInputLayout.setError("This field is required"); 

Снова я просто вижу строку чтения, а не сообщение об ошибке, поэтому кажется, что TextView, который показывал сообщение об ошибке, был уничтожен и не был создан снова.

Я читаю здесь , что объекты TextView уничтожаются, когда setErrorEnabled(false) и кажется, что он не создан снова. Ошибка или функция?

Источник для этого элемента управления еще не доступен в AOSP, поэтому я использовал декомпилятор, встроенный в Android Studio, для изучения кода, чтобы понять, что происходит неправильно. Я обнаружил, что setErrorEnabled () фактически создает и уничтожает объект TextView, тогда как я ожидал, что он просто переключит видимость.

Solutions Collecting From Web of "TextInputLayout setErrorEnabled не создает новый объект TextView"

Если кто-то сталкивается с той же проблемой, я нашел обходное решение, которое отлично работает. Просто установите видимость объекта TextView с ошибкой вкл. И выкл., Не уничтожайте объект.

Используйте это для включения сообщения об ошибке:

 if (textInputLayout.getChildCount() == 2) textInputLayout.getChildAt(1).setVisibility(View.VISIBLE); textInputLayout.setError("This field is required"); 

И для отключения сообщения об ошибке:

 textInputLayout.setError(null); if (textInputLayout.getChildCount() == 2) textInputLayout.getChildAt(1).setVisibility(View.GONE); 

Начиная с версии поддержки версии 23.1.1 (и, возможно, ранее), вызов setErrorEnabled (false) удалит ошибку TextView и заставит TextInputLayout отображать новую ошибку при вызове setError (String).

Тем не менее, все еще существует ошибка, при которой дополнительное отступы не удаляются из макета после удаления сообщения об ошибке. Эта ошибка может быть решена с помощью сообщения @ dabo выше:

https://code.google.com/p/android/issues/detail?id=200137

В моем случае ошибка установки, ошибка очистки и ошибка настройки снова вызвали ошибку. Линия снова не стала красной (API 23.4.0). Это решение помогло: TextInputLayout.setError () оставляет пустое пространство после устранения ошибки

Вызов setErrorEnabled(false) после setError(null) .