の項目がそれぞれTextInputLayout
にラップされたフォームがあります。 Submitボタンをクリックすると、EditText
が空であるかどうかがチェックされます。そうであれば、そのフィールドにエラーが表示されます。 ageWrapper.setError("Age required")
。フィールドの下にエラーメッセージが表示され、のhint
も赤に変わります。これはページのすべての入力フィールドで発生し、エラーは正常に機能しています。エラーをクリアした後、Android TextInputLayoutは赤色のままです
エラーをクリアした後に問題が発生します。私は最初にフィールドを空白のままにして、提出エラーが表示され、物事が赤く表示されます。私はフィールドに何かを入力し、再度送信します。今度は、エラーがなくなる(ageWrapper.setErrorEnabled(false)
)が、hint
は通常のエラーではない色に戻すのではなく、赤色のままです。
フィールドに何かを入力してエラーをクリアしても、エラーメッセージ自体(フィールドの下にある)が消えてもヒントがまだ赤であるため、このようなことは起こりません。
フィールドをもう一度クリックするか、ページの他のフィールドをクリックすると、赤いヒントテキストが通常の色に戻ります。
明らかにエラー表示が機能しています。表示されているとおりに消えてしまいます。しかし、Iveがフィールドに何かを入力してエラーをクリアし、フィールド自体(または別のフィールド)をクリックした後に通常の色に戻るだけで、ヒントテキストは赤色のままになるのはなぜですか?どのようにこの行動を取り除くのですか?
私の考えでは、両方のフィールドが空白の場合、両方とも赤で表示され、エラーメッセージが表示されます。フィールドの1つを入力すると、そのフィールドにsetErrorEnabled(false)
を設定する必要があります。ヒントテキストは正常に戻りますが、それは正しくありません。
<?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>
断片に対する
Javaクラス:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_new, container, false);
//Get all text fields
conditionWrapper = (TextInputLayout) view.findViewById(R.id.input_condition_wrapper);
ageWrapper = (TextInputLayout) view.findViewById(R.id.input_age_wrapper);
//Listener for create button
createButton = (Button) view.findViewById(R.id.input_submit);
createButton.setOnClickListener(this);
// Inflate the layout for this fragment
return view;
}
//Create/submit button click
@Override
public void onClick(View v) {
//Get input values
String condition = conditionWrapper.getEditText().getText().toString();
String age = ageWrapper.getEditText().getText().toString();
//If all the validation passes, submit the form. Else, show errors
if (!isEmpty(condition) & !isEmpty(age)) {
//Submit form data
} else {
if (isEmpty(condition)) {
conditionWrapper.setError("Condition required");
} else {
conditionWrapper.setErrorEnabled(false);
}
if (isEmpty(age)) {
ageWrapper.setError("Age required");
} else {
ageWrapper.setErrorEnabled(false);
}
}
}
//Check if a string is empty
public boolean isEmpty(String string) {
if (string.equals("")) {
return true;
} else {
return false;
}
}
使用conditionWrapper.setError(ヌル)にあなたのコード。 'setErrorEnabled(false) 'の代わりに –
?それとも? – Simon
の代わりにsetErrorEnabled(false)このコードを配置 –