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();
}
}
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With