2012-12-20 2 views
0

addChangeTextListener를 사용하려고하는데 키를 클릭하면 화면이 정지합니다. 이 여기에 코드입니다 : 당신의 else 문에서텍스트를 바꾼 후 화면이 얼려 짐

email = (EditText) findViewById(R.id.email); 


    email.addTextChangedListener(new TextWatcher() 
    { 
     @Override 
     public void afterTextChanged(Editable s) 
     { 
      if (email.getText().toString().matches("[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+") 
        && s.length() > 0) 
       error.setText("valid email"); 
      else 
       email.setText("invalid email");    
     } 
     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) 
     { 
     } 
     @Override 
     public void onTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) 
     {     
     } 
    }); 
+0

짐작할 수 있겠지만, setText를 호출하여 afterTextChanged를 호출하면 무한 루프가 발생합니까? – gsingh2011

+0

setText 메소드가 다른 EditText insntance (오류)에서 사용되었습니다. 내가 실수 한 것처럼 보입니다 ... email.setText ("invalid email"); –

+1

'email.setText ("invalid email");'그렇게 보이지 않습니다. – gsingh2011

답변

2
email.setText("invalid email"); 

위의 행은 다음과 같습니다 setText()를 사용하여

error.setText("invalid email"); 

, 당신은 다시 afterTextChanged()을 유발한다.

1

, 당신은 오타가 있습니다. 이메일이 아니라 오류가 발생하면 setText를 호출하려고합니다.

1

변경 리스너를 다시 호출하기 때문에 변경 리스너 내에서 텍스트를 설정하면 무한 루프가 발생합니다. TextWatcher.afterTextChanged()에 대한 안드로이드 문서에서

은 :

이 방법은 어딘가에 초 이내에, 텍스트 이 변경되었습니다, 당신을 통지하기 위해 호출됩니다. 이 콜백을 에서이 콜백으로 변경해야하지만 추가 변경 사항은 으로 재귀 적으로 다시 호출되므로 무한한 루프가되지 않도록주의하십시오. (변경 사항이 적용된 곳이 알려지지 않은 이유는 다른 afterTextChanged() 메서드가 이미 다른 변경을 수행하고 오프셋을 무효화했을 수 있으므로 입니다.하지만 여기에서 알아야 할 사항은 입니다. setSpan (Object, int, int, int)) onTextChanged (CharSequence를에, INT, INT, INT)는 당신의 장소를 표시하고 범위가 끝난 곳 다음 여기에서 찾아보십시오.

을 대신 email.setText()error.setText()를 호출하는 말은하지 않았다 확인하십시오.

관련 문제