안드로이드를 하다 보면 EditText의 값이 변경되었을 때 이벤트를 추가하고 싶은 경우가 있습니다.
이때 edittext의 addTextChangedListner를 사용하면 됩니다.
addTextChangedListner
val editText = findViewById<EditText>(R.id.edittext)
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("Not yet implemented")
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("Not yet implemented")
}
override fun afterTextChanged(p0: Editable?) {
TODO("Not yet implemented")
}
})
보시다시피 addTextChangedListener는 TextWatcher를 파라미터로 받습니다.
EditText의 텍스트 변경과 관련된 세 가지 상태에 대해서 이벤트를 정의할 수 있습니다.
- beforeTextChanged(CharSequence s, int start, int count, int after): 텍스트가 바뀌기 전 이벤트
- 문자가 새 텍스트로 대체될 것임을 알리기 위한 메서드
- onTextChanged(CharSequence s, int start, int before, int count) : 텍스트가 바뀌었을 때 이벤트
- 새로운 텍스트가 이전 텍스트를 방금 대체했을 때 로출되는 메서드
- afterTextChanged(Editable s) : 텍스트가 바뀌고 난 뒤 이벤트
- 텍스트가 변경되었음을 알리기 위한 메서드
로그캣으로 텍스트가 변경되었을 때 메서드가 어떻게 호출되는지 알아보았습니다.
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
Log.d("mytag", "바뀌기 전")
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
Log.d("mytag", "바뀌었을 때")
}
override fun afterTextChanged(p0: Editable?) {
Log.d("mytag", "바뀌고 나서")
}
})
세 개의 메서드가 값이 바뀔 때 순차적으로 실행됩니다.
TextWatcher와 TextWatcherAdapter
TextWatcher는 인터페이스이기 때문에 afterTextChanged, beforeTextChanged, onTextChanged 를 모두 구현해야 합니다.
하지만 TextWatcherAdapter를 사용하여 세 개의 메서드를 모두 구현하지 않고
원하는 메서드만 override해서 사용할 수 있습니다.
editText.addTextChangedListener(@SuppressLint("RestrictedApi")
object : TextWatcherAdapter() {
override fun onTextChanged(s: CharSequence, p1: Int, p2: Int, p3: Int) {
Log.d("mytag", "텍스트 변경")
}
})
저는 beforeTextChanged와 afterTextChanged는 사용하지 않을 것이기 때문에 TextWatcherAdapter 추상 클래스로 onTextChanged만 사용하여 이벤트를 정의했습니다.
본 글은 아래 문서를 참고하여 작성하였습니다.
https://developer.android.com/reference/android/text/TextWatcher
'IDE > Android Studio' 카테고리의 다른 글
[Android Studio] 인텐트 알아보기 (0) | 2023.08.30 |
---|---|
[AndroidStudio][Kotlin] Retrofit, 레트로핏으로 api 사용하기 (0) | 2023.08.16 |
[AndroidStudio][Kotlin] WebView로 웹 페이지 안드로이드 앱으로 빌드하기 (0) | 2023.08.15 |
[AndroidStudio][Kotlin] 웹 뷰 에러 net::ERROR_CACHE_MISS, (0) | 2023.08.13 |
[AndroidStudio][Kotlin] 안드로이드 스튜디오 로컬 서버 연결 security 설정, localhost가 안되는 이유, UnknownServiceException (0) | 2023.08.08 |