Я обновил версию поддержки lib до 24.2.0, и мой экран регистрации уже мертв. Проблема находится в TextInputLayout, у меня есть два метода:TextInputLayout setError метод бросает ClassCastException в 24.2.0
protected void setError(@Nullable CharSequence errorMsg, @NonNull EditText editText, boolean forceClean) {
TextInputLayout viewParent = (TextInputLayout) editText.getParent();
if (forceClean) {
viewParent.setErrorEnabled(false);
viewParent.setError(null);
}
viewParent.setErrorEnabled(true);
viewParent.setError(errorMsg);
}
protected void clearError(@NonNull EditText editText) {
TextInputLayout viewParent = (TextInputLayout) editText.getParent();
viewParent.setErrorEnabled(false);
viewParent.setError(null);
}
Я получаю сообщение об ошибке, когда я пытаюсь бросить родительский EditText к TextInputLayout, в макете у меня есть такой код для этого :
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_registration_firstname"
style="@style/registration_form_field"
android:hint="@string/login_registration_firstname"
android:inputType="textCapWords" />
</android.support.design.widget.TextInputLayout>
Таким образом, это работало прекрасно, но теперь он бросает ClassCastException:
java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.support.design.widget.TextInputLayout
Я интересно, если есть какие-то новые руководства по этому поводу?
Интересно, почему так просто, как это требует обходного пути? – Shaishav
@Shaishav Я думал, что это своего рода анти-шаблон - они всегда говорили, что иерархия должна быть ровной, и это добавляет два дополнительных уровня, в самом начале EditText отвечал за это - только один вид. –
Я не думаю, что это может быть хорошим решением. Команда библиотек поддержки Android может каждый раз изменять его, а также вы перемещаетесь в иерархии представлений с циклом и проверяете каждое представление, если оно является экземпляром. Просто используйте параметр InputTextLayout как параметр. –