テキストの入力時にテキストを検証しようとすると問題が発生します。ユーザーが「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で[OK]ボタンを取得できないと言われたので、助けを求めます。
これが機能しない場合、他の回避策はありますか?