2011-07-03 64 views
0

我已经用以下问题进行了测试: 我需要验证,EditText的值是1到1000之间的整数。如果不是,我应该将一些默认值放入EditText。 当我尝试用下面的代码做这样的事情时 - 我遇到了无限循环(好吧,那是可预测的)。我已经检查了类似的问题,但我仍然无法弄清楚,如何使代码正常工作。
是否有其他方法来实现理想的行为?我应该如何编辑我的代码来实现这一目标?
验证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){} 
    }); 

回答

1

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

这里是一些example code和一些documentation。如果你需要更复杂的东西,我建议你看看this code

+0

谢谢,我认为这就是我所需要的。 – Dirol

+0

欢迎。希望对你有效。 –

0

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

+0

当然,我已经注意到了这一点),问题是 - 如何避免它,仍然得到结果。 OnEnter,或任何其他按钮按下不适合这种情况下,导致用户可以点击按钮 - 这将他从这种布局 - 他看不到该程序纠正了他。 (嗯,他实际上可以通过Toast看到它,但是现在还有其他布局在他面前,这不太方便) – Dirol

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