addTextChangedListener를 만들면 TextWatcher를 반드시 implement 해야하는데 텍스트 체크하려는 editText들 마다 붙여주면 코드가 한바가지가 된다 코드를 쳐다 보기만 해도 속이 답답해져 왔다
리스너 하나로 어떻게 하면 각각의 editText를 감시할 수 있을까 생각했고 이것을 구현하기 위해 2시간이나 걸렸다...
oncreate 에서 찾아온 에디트텍스트들에게 같은 이름의 TextWatcher를 붙여준다
TextWatcher 객체를 만들면 3개의 메소드가 와라락 생기는데 그 중 내가 사용하려는 메소드는 afterTextChanged(Editable s) 였다
이 메소드를 editText별로 각각 동작하려면
afterTextChanged가 매개 변수로 받고 있는 Editable은 EditText의 전신이라는 것이 힌트이다
if문으로 Editable와 나의 editText를 비교해 각각 동작 하도록 할수 있었다
//텍스트 체인지 리스너
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String emailRex = etEmail.getText().toString();
String passWdRex = etPasswd.getText().toString();
String passWdCfRex = etPasswdConf.getText().toString();
//정규식
if(s == etEmail.getText()){
Boolean bool = Common.isValidEmail(emailRex);
Log.i("MyLog","bool=" +bool);
if(bool==false) etEmailLay.setHelperText("이메일 형식이 맞질 않습니다");
else {
etEmailLay.setHelperText(null);
}
}
if(s == etPasswd.getText()){
Boolean bool = Common.isValidPasswd(passWdRex);
Log.i("MyLog","bool=" +bool);
if(bool==false) {
passwdlay.setHelperText("비밀번호 형식이 맞질 않습니다");
} else passwdlay.setHelperText(null);
}
if(s == etPasswdConf.getText()){
if(!passWdRex.equals(passWdCfRex)){
passwdcoflay.setHelperText("비밀번호가 틀립니다");
} else {
passwdcoflay.setHelperText(null);
}
}
}
};