반응형
RatingBar의 리스너 ( OnRatingBarChangeListener )
interface OnRatingBarChangeListener {
abstract fun onRatingChanged(
ratingBar: RatingBar!,
rating: Float,
fromUser: Boolean ): Unit
}
이렇게 구현체가 하나의 메서드만 override 하면 되는 경우 람다를 이용하여 간단하게 구현하여 사용할 수 있다.
binding.ratingBar.setOnRatingBarChangeListener { ratingBar, rating, fromUser -> }
또한 만약에 구현해야하는 메서드의 인자까지 하나라면, 람다에서는 인자 표현 생략도 가능하고, 해당 인자를 it으로 참조하면 된다.
binding.something.addListener{ print(it.text) }
위는 없는 코드이지만, 예시이다.
SeekBar의 리스너 ( OnSeekBarChangeListener )
interface OnSeekBarChangeListener {
abstract fun onProgressChanged(
seekBar: SeekBar!,
progress: Int,
fromUser: Boolean ): Unit
abstract fun onStartTrackingTouch(seekBar: SeekBar!): Unit
abstract fun onStopTrackingTouch(seekBar: SeekBar!): Unit
}
하지만 이렇게 구현체가 세 개의 메서드를 오버라이드 해야 한다면
binding.seekBar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
TODO("Not yet implemented")
}
override fun onStartTrackingTouch(p0: SeekBar?) {
TODO("Not yet implemented")
}
override fun onStopTrackingTouch(p0: SeekBar?) {
TODO("Not yet implemented")
}
})
람다가 아니라 직접 작성해 주어야 한다.
구현해야하는 함수가 몇개냐에 따라 다른 것이다.
하지만 구현해야하는 메서드가 여러개일지라도, 그 중에서 꼭 잘 쓰이는게 있을 거고, 잘 안 쓰이는게 있을 수 있다.
매번 여러개를 다 구현해놓는 것도 불편하고 낭비일 수 있다.
TextWatcher 같은 경우에는 구현해야 하는 메서드가 총 3개이지만, 하나의 메서드가 자주 쓰이기 때문에
람다를 이용해서, afterTextChanged() 만 구현하는 방법도 제공한다.
interface TextWatcher {
abstract fun afterTextChanged(s: Editable!): Unit
abstract fun beforeTextChanged(
s: CharSequence!,
start: Int,
count: Int,
after: Int ): Unit
abstract fun onTextChanged(
s: CharSequence!,
start: Int,
before: Int,
count: Int ): Unit
}
View의 OnClickListener
구현하는 함수도 하나, 인자도 하나이다. 따라서 람다로 구현하고, 인자도 생략하여 it으로 사용할 수 있다.
interface OnClickListener {
abstract fun onClick(v: View!): Unit
}
틀린 지식이 있다면 피드백 부탁드립니다.
반응형
'[Android] > [Kotlin]' 카테고리의 다른 글
코틀린 심화문법 - 코루틴 Deep Dive (0) | 2023.01.13 |
---|---|
코틀린 심화문법 - 람다, 고차함수 (0) | 2023.01.12 |
코틀린 심화문법 - 스코프 함수 (0) | 2023.01.11 |
코틀린 심화문법 - 지연 초기화 (0) | 2023.01.11 |
[안드로이드 강의작성] View Binding이란 ( Feat. Data Binding ) (0) | 2023.01.10 |