验证EditText

时间:2011-07-03 01:27:23

标签: android

我遇到了以下问题: 我需要验证,EditText的值是1到1000之间的整数。如果不是 - 我应该将一些默认值放入EditText。 当我尝试使用以下代码执行此类操作时 - 我进入无限循环(好吧,这是可预测的)。我已经检查了类似的问题,但我仍然无法弄清楚,如何使代码工作。
有没有其他方法来实现理想的行为?我应该如何编辑我的代码来实现这个目标?

    Long mailIntervalValue;
    EditText etMailInterval;
        .
        .
        .
        .
    etMailInterval=(EditText)findViewById(R.id.et_mail_check_interval);
    etMailInterval.setText(mailIntervalValue.toString());
    etMailInterval.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {
            Integer t=Integer.getInteger(s.toString());
            if (t==null){
                s.clear();
                s.append(mailIntervalValue.toString());
                mailIntervalValue=MessageManager.DEFAULT_TIME;
            }
            else
                mailIntervalValue=t.longValue();
            if (mailIntervalValue<1 || mailIntervalValue>1000){
                if (mailIntervalValue<1)
                    mailIntervalValue=1L;
                else
                    mailIntervalValue=1000L;
                s.clear();
                s.append(mailIntervalValue.toString());
                Toast.makeText(MainActivity.this, MainActivity.this.getString(R.string.settings_timer_fail),
                        Toast.LENGTH_SHORT).show();
            }

            saveMailerPrefs();
        }
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){}
    });

3 个答案:

答案 0 :(得分:1)

我建议使用预期的工具:input filter可能是更好的选择。

以下是一些example code和一些documentation。如果您需要更复杂的内容,我建议您查看this code

答案 1 :(得分:0)

您是否注意到TextWatcher正在调用自己?我认为用任何其他事件检查验证是更好的方法,例如在输入时按或按钮等。

答案 2 :(得分:0)

您可以使用z-validations library作为案例,InRange验证 - 这正是您所需要的。使用库的示例代码:

//create validation form
Form form = new Form(mActivity);
form.addField(Field.using(mYourEditText).validate(InRange.build(mContext, minAllowed, maxAllowed)));

//validate form

if (form.isValid()) {
    Toast.makeText(this, "Form is valid", Toast.LENGTH_SHORT).show();
}

有关EditText验证的更多信息以及您可以在帖子中阅读的此库:Android form validation - the right way