2016-08-04 3 views
0

У меня есть следующие проверкипроверка EditText работает только один раз

private boolean validatePin() { 

    String pin = pinTxt.getText().toString().trim(); 

    if (TextUtils.isEmpty(pin) || pin.length() != 4) { 
     pin_layout.setError(mContext.getString(R.string.err_msg_pin)); 
     requestFocus(pinTxt); 
     return false; 
    } else { 
     pin_layout.setErrorEnabled(false); 
    } 
    return true; 
} 

И я звоню его на afterTextChanged так:

public void afterTextChanged(Editable editable) { 
     switch (view.getId()) { 
      case R.id.pinTxt: 
       validatePin(); 
       break; 
     } 
    } 

Что я получаю с этого является то, что текст ошибки показывает В первый раз я набираю менее 4 символов в editText, но когда я удаляю все и снова набираю текст, я не получаю сообщение об ошибке. Любые идеи, как показывать это сообщение об ошибке каждый раз, когда я начинаю вводить текст в editText, а не только в первый раз?

+0

setErrorEnabled (true)? –

+0

что такое 'pin_layout'? не могли бы вы объяснить это? – himanshu1496

+0

@TimCastelijns Я установил его в true, если - не работал. Затем я попытался установить его в другом месте, но он показывал сообщение об ошибке каждый раз, когда я ввожу что-то (например, если он постоянно работает). –

ответ

0

Изменить код:

pinTxt.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) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     validatePin(); 
    } 
}); 

И

private boolean validatePin() { 

String pin = pinTxt.getText().toString().trim(); 

if (TextUtils.isEmpty(pin) || pin.length() != 4) { 
    pin_layout.setError(mContext.getString(R.string.err_msg_pin)); 
    requestFocus(pinTxt); 
    return false; 
} else { 
    pin_layout.setError(null); 
} 
return true; 
} 

ошибки Так вот я заходящего в textInputLayout, который принимает входные данные для штифта и установить ошибку null, когда условие ошибки не выполнено, что скроет ошибку.

+0

Это сработало. Спасибо! –

+0

Прохладный! счастливое кодирование !! : D – himanshu1496

0

попробовать это внутри редактирования текстовом в XML

android:inputType="textNoSuggestions" 
+0

Благодарим вас за ответ, но установка этого свойства в xml ничего не изменила. –

-1
pinTxt.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) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      validatePin(); 
     } 
    }); 

попробовать это, addTextChange слушателя EditText. Теперь поместите ваш проверочный код в функции AfterTextChanged из TextWatcher

+0

Почему вы думаете, что его afterTextChanged не работает? (он работает btw) –

+0

да это работает. но когда вы добавляете textChangeListener в EdtiText, нет необходимости проверять его «switch (view.getId())». поэтому я упростил его код для использования –

+0

Простой субъективен. Предложить код рефакторинга, не изменяя ничего, что действительно имеет значение, не очень полезно –

Смежные вопросы