더보기

작성 중 날라가 다시씀

서버에 EditText에 입력한 값이 유효한지 확인하는 부분을 만들어야하는중에 TextWatcher를 설명하는 글을 보게 되었다. TextWatcher를 통해 입력이 끝났을 때 발생하는 event가 실행된다는 설명들을 볼 수 있었는데, 간단히 설명된 글들도 많고 감이 잘 잡히지 않아, 언제 호출되는지 테스트해보기로 했다.

 

테스트하며 작성한 코드와 주석을 첨부했다.

        /* 1차 테스트
        - 이벤트가 호출되는 시점을 알아보기 위해 println()으로 호출되었음을 확인해보기

        결과
        - 글자 하나를 입력할 때 마다 3개의 이벤트가 모두 호출됨
        - 작성 전, 작성 중, 작성 끝 순으로 키보드 한번 입력마다 3개의 이벤트가 모두 호출됨

        생각했던 예상
        - 입력시작하려할 때 작성 전 이벤트 발생후, 텍스트를 연속으로 작성하는 동안 작성 중, 멈추면 작성 끝이 나올 것이라 생각했음
        */

        /* 2차 테스트
        - 각 단계에서 입력중인 텍스트의 값을 찍어보기

        결과
        - 작성전(before) : 새로운 텍스트가 입력되기 전의 Text값을 가져옴
        - 작성중(on) : 새로운 텍스트가 입력된 값을 가져옴
        - 작성끝(after) : onTextChanged와 같은 값을 가져옴
        - "곡 -> 고기" 로 변할 때 최종적으론 고기가 작성중과 작성끝에서 값을 다 가져오지만
          "고기" 를 가져오기 전
          before: 곡, on : 고, after: 고
          before: 고, on : 고기, after : 고기     이렇게 읽어옴

          생각했던 결과
          before와 on, after에서 읽어올 때 생각했던 부분이 일부 맞았음
          받침있는 글자에서 새로운 글자로 변할 때 위와 같은 순차가 아니라 before: 곡, on,after: 고기 이렇게 한번에 가져올 것이라 생각했던 부분이 다름
        */

        /* 정리
        텍스트 작성이 완료된 시점에 서버의 데이터와 비교하기위해 이벤트 발생 시점과 읽어오는 값을 테스트하게 되었고,
        이벤트 발생이 키입력 한번마다 일어나서 서버쪽 데이터와 비교하는걸 이 부분에 만들게되면 너무 잦은 request를 보내게되어 부적합하다고 생각함.

        작성을 완료하고 해당 값이 정상적인 값인지 확인하는 버튼을 두는 방식으로 만들어야겠음.
         */
        editText.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
                showMessage("afterTextChanged", "입력이 완료되었습니다3", editText.text.toString())
                showLine()
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
                showMessage("beforeTextChanged", "입력하기 전입니다1", editText.text.toString())
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                showMessage("onTextChanged", "타이핑 중입니다2", editText.text.toString())
            }
        })

아래는 실행해본 결과이다.

Test

 

간단히 "고기"라고 입력을 하며 확인한 화면 중 일부이다.

입력이 완료되었다는 설명을 읽었을 때 고기라고 멈추지않고 입력했을 때, "고기"의 입력이 끝나고 이벤트가 발생될 것이라 생각했었지만, 키입력 한번이 끝날때마다 입력 완료 이벤트가 발생했다.

 

키 입력마다 이벤트의 발생이 일어나 서버의 데이터와 확인하는 부분을 이곳에 만들면 너무 많은 request가 발생하게 되어 적합하지 않다는 결론을 내리게 됐다.

'Android' 카테고리의 다른 글

[안드로이드] 패키지명, Color 변경  (1) 2019.11.17
[안드로이드] 기본위젯과 드로어블  (0) 2019.11.16
[Kotlin] 안드로이드 권한 - 1  (0) 2019.09.30
[Design] Material Design  (0) 2019.08.18
[Kotlin] Room Library  (0) 2019.08.17

+ Recent posts