0

テキストの入力時にテキストを検証しようとすると問題が発生します。ユーザーが「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エラーが発生しますが、GXW1文字を超えるとエラーは発生しません。

私の質問が簡潔で理解しやすいことを願っています。これを読んだ後、実際には他の方法がわからず、EditTExtPreferenceで[OK]ボタンを取得できないと言われたので、助けを求めます。

これが機能しない場合、他の回避策はありますか?

4

1 に答える 1

0

笑 私は初心者です、私はそれを手に入れました..

        @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);
            }
        }

そしてその働き..

于 2014-08-14T03:14:16.267 に答える