清除错误

时间:2016-03-19 05:54:03

标签: android android-layout android-edittext material-design android-textinputlayout

我有一个包含多个EditText项目的表单,每个项目都包含在TextInputLayout中。单击“提交”按钮时,我会检查EditText是否为空。如果是,我在该字段上调用错误,例如ageWrapper.setError("Age required")。这会在字段下显示错误消息,并将hint的{​​{1}}更改为红色。对于页面上的所有输入字段都会出现这种情况,并且错误正常。

清除错误后出现问题。我首先将该字段留空并提交 - 错误显示并且事物显示为红色。然后我在字段中输入内容,然后再次提交。现在,错误消失了(EditText),但ageWrapper.setErrorEnabled(false)保持红色而不是改回正常的非错误颜色。

这不应该发生,因为错误已经通过在字段中键入内容而被清除,但是提示仍然是红色意味着错误,即使错误消息本身(在字段下)消失了。

当我再次单击该字段或页面上的任何其他字段时,红色提示文本会变回其正常颜色。

显然错误显示正常 - 它会显示并消失。但是为什么在我通过在字段中键入内容来清除错误之后,提示文本仍然保持红色,并且只有在单击字段本身(或其他字段)后才会更改回其常规颜色?我如何摆脱这种行为?

在我看来,如果两个字段都为空,则两者都将显示红色并显示错误消息。如果我然后填写其中一个字段,则应在该字段上设置hint,并且提示文本应该恢复正常,但它不会。

setErrorEnabled(false)

片段的Java类:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/new_layout_padding">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_condition_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/input_subnum_wrapper">

        <EditText
            android:id="@+id/input_condition"
            android:layout_width="match_parent"
            android:layout_height="@dimen/new_form_element_height"
            android:hint="@string/input_text_condition"
            android:inputType="number" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_age_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/input_condition_wrapper">

        <EditText
            android:id="@+id/input_age"
            android:layout_width="match_parent"
            android:layout_height="@dimen/new_form_element_height"
            android:hint="@string/input_text_age"
            android:inputType="number" />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/input_submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:ems="5"
        android:text="@string/input_button_save" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

将您的代码更改为

 if (isEmpty(condition)) {
            conditionWrapper.setError("Condition required");
        } else {
             conditionWrapper.setError(null);
        }