简体   繁体   English

EditTextPreference在输入文本时验证

[英]EditTextPreference validate upon entry of text

I have a problem when trying to validate text upon entry of text, I have a hint that a user should follow 'GXW-999' is an example, this is my code: 我在尝试输入文本时尝试验证文本时遇到问题,我提示用户应遵循“ 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);
            }
        }

    });`

My abstract textwatcher 我的抽象文本观察者

`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

    }

}`

The problem im getting at is when typing the last number 999 and if i exceed to 1 more number 9999 im getting an error whilst the GXW if i exceed it to 1 more character it wont have any error. 我遇到的问题是键入最后一个数字999 ,如果我超过1个数字,则输入9999 im会出错,而GXW如果我超过1个数字,则不会出现任何错误。

I hope my question is concise and easy to understand. 希望我的问题简洁明了。 I beg of help because im actually dont know other ways around after i have read this and it said you cant get the ok button in EditTExtPreference. 我恳求帮助,因为在阅读完此内容后,我实际上不知道其他方法,并且它说您无法在EditTExtPreference中获得“确定”按钮。

If this wont work , is there any other work around? 如果这不起作用,是否还有其他解决方法?

lol im a noob, i got it.. just change my 大声笑,我是菜鸟,我明白了。

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

to

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

and its working.. 及其工作..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM