[AndroidStudio][Kotlin] EditText의 addTextChangedListener, TextWatcher, TextWatcherAdapter

2023. 8. 13. 21:58·IDE/Android Studio

안드로이드를 하다 보면 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
'IDE/Android Studio' 카테고리의 다른 글
  • [AndroidStudio][Kotlin] Retrofit, 레트로핏으로 api 사용하기
  • [AndroidStudio][Kotlin] WebView로 웹 페이지 안드로이드 앱으로 빌드하기
  • [AndroidStudio][Kotlin] 웹 뷰 에러 net::ERROR_CACHE_MISS,
  • [AndroidStudio][Kotlin] 안드로이드 스튜디오 로컬 서버 연결 security 설정, localhost가 안되는 이유, UnknownServiceException
hurlud
hurlud
나와 같은 궁금증을 가진 사람들을 위해 오늘도! 🐥
  • hurlud
    주독야독
    hurlud
  • 전체
    오늘
    어제
  • 최근 글

    • ALL (106)
      • CS (13)
      • Linux (2)
      • Deploy (7)
        • AWS (6)
        • Docker (1)
      • IDE (13)
        • IntelliJ (5)
        • Android Studio (8)
      • DB (10)
        • MySQL (6)
        • MongoDB (4)
      • Programming Language (20)
        • JavaScript (10)
        • Java (8)
        • Python (2)
      • Framework (32)
        • Node.js (6)
        • SpringBoot (17)
        • React (6)
        • NestJS (2)
      • Git | Github (4)
      • ETC (5)
      • Akka (0)
  • 링크

    • 깃허브
  • hELLO· Designed By정상우.v4.10.0
hurlud
[AndroidStudio][Kotlin] EditText의 addTextChangedListener, TextWatcher, TextWatcherAdapter
상단으로

티스토리툴바