더보기
작성 중 날라가 다시씀
서버에 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())
}
})
아래는 실행해본 결과이다.
간단히 "고기"라고 입력을 하며 확인한 화면 중 일부이다.
입력이 완료되었다는 설명을 읽었을 때 고기라고 멈추지않고 입력했을 때, "고기"의 입력이 끝나고 이벤트가 발생될 것이라 생각했었지만, 키입력 한번이 끝날때마다 입력 완료 이벤트가 발생했다.
키 입력마다 이벤트의 발생이 일어나 서버의 데이터와 확인하는 부분을 이곳에 만들면 너무 많은 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 |