이번에는 코틀린의 고차 함수와 람다 표현식을 사용해 RecyclerView에 Click Event를 추가해보겠습니다.
결과
과일 이름 리스트를 보여주고, 텍스트 뷰 하나만 있는 매우 심플한 Recyclerview입니다.
클릭했을 경우 클릭된 과일의 이름을 토스트 메시지로 출력하도록 해보겠습니다.
클릭 시 호출될 함수 생성
Activity 파일에 Adpater에서 호출할 함수를 생성합니다.
private fun listItemClicked(fruit: Fruit){
Toast.makeText(this@MainActivity,
"fruit name is ${fruit.name}",Toast.LENGTH_LONG).show()
}
Adpater 생성자에 클릭 리스너 람다 함수를 매개 변수로 설정하기
Adpater 생성자의 두 번째 매개변수를 보면 Fruit이란 클래스를 매개변수로 가지고 반환 값은 없는 람다식을 매개변수로 가지고 있습니다.
이런 형태가 가능한 이유가 코틀린이 함수형 프로그래밍을 지원하기 때문입니다.
함수형 프로그래밍은 람다식과 고차 함수를 사용합니다.
밑에 Adapter 생성자의 경우 람다식을 매개변수로 한 고차 함수입니다.
class MyRecyclerViewAdapter(
private val fruitsList:List<Fruit>,
private val clickListner:(Fruit)->Unit
) : RecyclerView.Adapter<MyViewHolder>() {
}
Adpater에서 아이템 View 클릭 리스너 호출하기
아이템 View 클릭 시 Fruit 객체를 인자로 하는 클릭 리스너 함수를 실행하는 것을 볼 수 있습니다.
view.setOnClickListener{
clickListner(fruit)
}
Adpater 생성 시 클릭 이벤트 함수를 넘겨줍니다.
다음 코드는 어뎁터를 생성하고 Recyclerview에 설정합니다.
저희가 주의해야 할 부분은 Adapter를 생성하는 부분입니다.
Adapter의 생성자의 두 번째 매개변수는 클릭 리스너인 람다 함수입니다.
마지막 인자가 람다식이라서 소괄호 바깥으로 람다식을 분리했고, 클릭 시 호출될 함수를 인자로 넘겨 Adapter를 생성합니다.
my_recycler_view.adapter = MyRecyclerViewAdapter(fruitsList) { selectedFruitItem:Fruit->listItemClicked(selectedFruitItem)}
전체 소스 : github.com/keepseung/Android-Blog-Source
'Android > 개념 및 예제' 카테고리의 다른 글
Android SQLite를 사용하여 데이터를 저장하기 (0) | 2021.05.14 |
---|---|
안드로이드 앱 개발의 특징 및 디렉터리 구조 (0) | 2021.05.14 |
android 공식 문서를 영어로 봐야하는 이유 (0) | 2021.01.20 |
[안드로이드] 핸드폰 번호, 기기 고유 id 등 단말기 정보 가져오기 (2) | 2021.01.19 |
안드로이드 런타임 퍼미션(runtime permissions) (0) | 2021.01.19 |