Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Form Validation in android TextInputLayout not working correctly

I am trying to validate the form, i am using TextInputLayout error to show the error, when i click submit button in empty form, the error is shown in only Name field, and the error is not hiding when i fill the name text. Also the other fields not showing validation error.

activity_form.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:orientation="vertical">

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

            <android.support.design.widget.TextInputEditText
                android:id="@+id/formNameEdit"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/form_hint_name"
                android:inputType="textPersonName"
                android:imeOptions="actionNext"
                android:maxLines="1" />
        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:id="@+id/formEmailEdit"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/form_hint_email"
                android:inputType="textEmailAddress"
                android:imeOptions="actionNext"
                android:maxLines="1" />

        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/form_hint_mobile_number"
                android:imeOptions="actionNext"
                android:id="@+id/formMobileEdit"
                android:inputType="number"
                android:maxLines="1" />

        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/form_hint_alternate_number"
                android:imeOptions="actionNext"
                android:id="@+id/formAlternateEdit"
                android:inputType="number"
                android:maxLines="1" />

        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:imeOptions="actionNext"
                android:id="@+id/formJeeEdit"
                android:hint="@string/form_hint_jee"
                android:inputType="number"
                android:minLines="1" />

        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/form_hint_percentage"
                android:imeOptions="actionNext"
                android:id="@+id/formPerEdit"
                android:inputType="numberDecimal"
                android:minLines="1" />
        </android.support.design.widget.TextInputLayout>

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

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:imeOptions="actionNext"
                android:hint="@string/form_hint_city"
                android:id="@+id/formCityEdit"
                android:inputType="text" />

        </android.support.design.widget.TextInputLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Spinner
                android:id="@+id/deptSpinner"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                >

            </Spinner>

            <Spinner
                android:id="@+id/SourceSpinner"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content">
            </Spinner>


        </LinearLayout>

        <Button
            android:id="@+id/submit_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/roundedbutton"
            android:text="@string/form_submit_btn" />
    </LinearLayout>

</ScrollView>

FormActivity.java

mSubmitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Validation();
            }
        });

private void Validation(){
        boolean isValid = true;
        String dept = mDepartmentSpinner.getSelectedItem().toString();
        String source = mSourceSpinner.getSelectedItem().toString();

        String name = NameInputLayout.getEditText().getText().toString();

        if(NameInputLayout.getEditText().getText().toString().isEmpty()){
            NameInputLayout.setError("Enter Name");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
            Log.d("form error", "Error removed");
        }
        String email = EmailInputLayout.getEditText().getText().toString();
        if(EmailInputLayout.getEditText().getText().toString().isEmpty()){
            NameInputLayout.setError("Enter Email");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }

        String phone = PhoneInputLayout.getEditText().getText().toString().trim();
        if(phone.isEmpty()){
            NameInputLayout.setError("Enter Phone Number");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }

        String alternate_num = AlternateInputLayout.getEditText().getText().toString();
        if(alternate_num.isEmpty()){
            NameInputLayout.setError("Enter Alternate Number");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }

        String jee_marks = JeeInputLayout.getEditText().getText().toString();
        if(jee_marks.isEmpty()){
            NameInputLayout.setError("Enter Roll Number");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }

        String percentage = PercentageInputLayout.getEditText().getText().toString();
        if(percentage.isEmpty()){
            NameInputLayout.setError("Enter Percentage");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }

        String city = CityInputLayout.getEditText().getText().toString();
        if(city.isEmpty()){
            NameInputLayout.setError("Enter Name");
            isValid = false;
        }else {
            NameInputLayout.setErrorEnabled(false);
        }


        if(isValid){

            Boolean insert = dbHelper.insertForm(name,email,phone,alternate_num,jee_marks,percentage,city,dept,source);

            if(insert == true){

                Toast.makeText(getApplicationContext(),"Form Submitted",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(FormActivity.this, MainActivity.class);
                startActivity(intent);

            }else {
                Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_SHORT).show();
            }

        }
}
like image 991
Shubham Avatar asked Feb 24 '26 13:02

Shubham


1 Answers

here is code snippet to remove error(user text change listener in edittext) you need to call for every edit text and textinput layout.

 public static void addTextChangedListener(EditText e, final TextInputLayout t) {
    e.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() > 0) {
                if (!TextUtils.isEmpty(t.getError())) {
                    t.setError(null);
                    t.setErrorEnabled(false);
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

and second thing you are validation EmailInputLayout and setting erroer to NameInputLayout in each input field.
-do copy paste but smartly.

like image 109
Amit Goswami Avatar answered Feb 27 '26 04:02

Amit Goswami



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!