1

の項目がそれぞれ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; 
    } 
} 
+1

使用conditionWrapper.setError(ヌル)にあなたのコード。 'setErrorEnabled(false) 'の代わりに –

+1

?それとも? – Simon

+0

の代わりにsetErrorEnabled(false)このコードを配置 –

答えて

1

変更

if (isEmpty(condition)) { 
      conditionWrapper.setError("Condition required"); 
     } else { 
      conditionWrapper.setError(null); 
     } 
関連する問題