2011-07-03 6 views
0

다음과 같은 문제가 있습니다. 유효성을 검사해야하는데 EditText의 값은 1에서 1000 사이의 정수입니다. 그렇지 않은 경우 EditText에 기본값을 넣어야합니다. 다음 코드로 이러한 작업을하려고 할 때 - 무한 루프가 발생합니다 (예상 할 수 있음). 비슷한 질문을 했는데도 코드를 작동시키는 방법을 알아 내지 못합니다.
바람직한 동작을 구현하는 다른 방법이 있습니까? 어떻게 이것을 달성하기 위해 코드를 편집해야합니까?
Validate 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 또는 다른 버튼 누르기가이 경우 적합하지 않기 때문에 사용자가 버튼을 클릭 할 수 있습니다.이 버튼을 클릭하면 레이아웃에서 빠져 나와 프로그램을 수정 한 것을 볼 수 없습니다. (글쎄, 그는 실제로 토스트에 의해 그것을 볼 수 있지만 여전히 사용자 앞에 친숙하지 않은 다른 레이아웃이 있습니다.) – 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