#android #android-edittext #android-textinputlayout
#Android #android-редактировать текст #android-textinputlayout
Вопрос:
Я пытаюсь проверить форму, я использую TextInputLayout error, чтобы отобразить ошибку, когда я нажимаю кнопку отправки в пустой форме, ошибка отображается только в поле Name, и ошибка не скрывается, когда я заполняю текст имени. Также в других полях не отображается ошибка проверки.
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();
}
}
}
Ответ №1:
вот фрагмент кода для устранения ошибки (пользовательский прослушиватель изменения текста в edittext), который необходимо вызывать для каждого редактирования текста и макета ввода текста.
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) {
}
});
}
и, во-вторых, вы проверяете EmailInputLayout и устанавливаете erroer на NameInputLayout в каждом поле ввода.
-скопируйте вставку, но аккуратно.
Ответ №2:
Кажется, вы используете один и тот же TextInputLayout (NameInputLayout) со всеми вашими полями. Следовательно, после ввода имени, когда выполняется блок else, для errorEnabled устанавливается значение false , в результате чего другая ошибка не устанавливается.
И для устранения ошибки в вашем случае else выполните следующее:-
NameInputLayout.setError(null)
вместо :-
NameInputLayout.setErrorEnabled(false);
В противном случае вам придется снова установить setErrorEnabled в значение true, чтобы использовать его.
Комментарии:
1. Привет, спасибо за ответ, теперь ошибка отображается для всех полей при отправке пустых полей, но когда я заполняю поля, ошибка все еще присутствует .., setError (null) не выполняется
2. в вашем состоянии должна быть проблема, попробуйте ее с помощью TextUtils.isEmpty(strVar)