EditText 텍스트 체인지리스너 하나로 여러 EditText 각각 반응하기

소정·2023년 3월 1일
0

Android_with_Java

목록 보기
19/34

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);
                }
            }
        }
    };

   
profile
보조기억장치

0개의 댓글