EditTextPreference проверить при вводе текста
У меня проблема при попытке проверить текст при вводе текста, у меня есть подсказка, что пользователь должен следовать "GXW-999", это пример, это мой код:
`public final static String[] PATTERNS = {"[A-Z]{1}" , "[A-Z]{2}" , "[A-Z]{3}" , "[A-Z]{3}-", "[A-Z]{3}-[0-9]{1}", "[A-Z]{3}-[0-9]{2}", "[A-Z]{3}-[0-9]{3}" };`
....
` mTextPreference.getEditText().setHint("GXW-999");
mTextPreference.getEditText().setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
mTextPreference.getEditText().addTextChangedListener(new AfterTextChanged(etext){
@Override
public void validate(EditText v, Editable s) {
// TODO Auto-generated method stub
Log.i(TAG, "after text change " + s.toString());
String text = s.toString();
int length = text.length();
if(length <= 0) return;
if(!Pattern.matches(PATTERNS[length - 1], text)){
text = s.delete(length - 1, length).toString();
v.setText(text);
}
}
});`
Мой абстрактный текстовый наблюдатель
`private abstract class AfterTextChanged implements TextWatcher{
private EditText v;
public AfterTextChanged(EditText v){
this.v = v;
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
validate(v , s);
}
public abstract void validate(EditText v , Editable s);
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
}`
Проблема, которую я получаю, заключается в том, чтобы набрать последний номер 999
и если я превышаю еще 1 число 9999
я получаю сообщение об ошибке, пока GXW
если я превышаю его еще на 1 символ, то ошибки не будет.
Я надеюсь, что мой вопрос лаконичен и прост для понимания. Я прошу помощи, потому что я на самом деле не знаю других способов после того, как я прочитал это, и он сказал, что вы не можете получить кнопку ОК в EditTExtPreference.
Если это не сработает, есть ли какая-то другая работа вокруг?
1 ответ
Решение
Лол я нуб, я понял.. просто поменяй
@Override
public void validate(EditText v, Editable s) {
// TODO Auto-generated method stub
Log.i(TAG, "after text change " + s.toString());
String text = s.toString();
int length = text.length();
if(length <= 0) return;
if(!Pattern.matches(PATTERNS[length - 1], text)){
text = s.delete(length - 1, length).toString();
v.setText(text);
}
}
в
@Override
public void validate(EditText v, Editable s) {
// TODO Auto-generated method stub
Log.i(TAG, "after text change " + s.toString());
String text = s.toString();
int length = text.length();
if(length <= 0) return;
int max_length = Math.min(length - 1, PATTERNS.length - 1);
if(!Pattern.matches(PATTERNS[max_length], text)){
text = s.delete(length - 1, length).toString();
Log.i(TAG, "the text " + text);
v.setText(text);
}
}
и его работа..