728x90
안드로이드 개발을 코틀린을 진행하다 보면, 인터페이스 객체를 생성해야 사용해야 하는 경우가 종종 발생한다.
예를 들면,
View 클래스의 OnClickListener 같은 것을 만들어서 버튼에 붙여야 한다거나,
BottomNavationBar의 OnNavigationItemSelectedListener 를 만들어서 각 이벤트 처리를 하는 등등..
여러 가지 경우에 아주 흔하게 사용되는 것들이다.
바로 본론을 들어가면 코틀린에서 object를 이용해서 인터페이스 객체를 생성해야 한다.
바로 아래와 같이 코딩이 될 수 있다.
private val onNavigationItemSelectedListener = (object: BottomNavigationView.OnNavigationItemSelectedListener{
override fun onNavigationItemSelected(p0: MenuItem): Boolean {
// code
}
})
코틀린에서는 기본적으로 람다를 제공하기 때문에 이를 람다식으로 변환하게 되면 아래와 같이 될 수 있다.
private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
// code
}
아주 쉽고 간단하다. 대신 람다식처럼 간단하게 사용될 때에는 구현이 필요한 메서드가 1개인 경우에 한해서이다. 변수를 어러개가 될 수 있다.
만약 인터페이스 내부에 구현될 함수가 여러 개라면?
ViewPager의 OnPageChangeListener의 경우를 보면 3개의 내부 메서드를 구현해야 하고 아래와 같이 구현하여 람다식을 사용할 수 없다.
private val onPageChangeListener = (object : ViewPager.OnPageChangeListener{
override fun onPageScrollStateChanged(p0: Int) {
}
override fun onPageScrolled(p0: Int, p1: Float, p2: Int) {
}
override fun onPageSelected(p0: Int) {
}
})
728x90
'IT > Android' 카테고리의 다른 글
Custom view [Classname] overrides onTouchEvent but not performClick 오류 처리 (0) | 2020.04.27 |
---|---|
[Google] Cloud Vision API 가격 정보 (0) | 2019.11.18 |
[Android] FragmentPagerAdapter와 FragmentStatePagerAdapter 차이 (1) | 2019.08.27 |
[Kotlin] 코틀린에서 !! 연산자의 의미 (0) | 2019.08.16 |
[Android] Kotlin + RxJava + Retrofit + OkHttp 로 http 통신하기 (0) | 2019.08.12 |