Click Event
Recycler View는 List VIew와 다르게 뷰에서 클릭 이벤트를 다루지 않고 아이템 뷰에서의 이벤트를 통해 처리한다.
따라서 뷰 홀더가 생성되는 시점에 이벤트 리스너를 추가한다.
class ViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.setOnClickListener {
val pos = adapterPosition
if (pos != RecyclerView.NO_POSITION) {
// click event
}
}
}
}
getAdapterPosition()를 이용하면 클릭된 아이템의 위치를 가져올 수 있다.
이때 NO_POSTION인지 검사하여 갱신 과정에서 포지션이 없는 경우를 방지한다.
외부 Click 처리
Adpater 내 Custom Listener Interface 정의
interface OnItemClickListener {
fun onItemClick(v: View?, pos: Int)
}
리스너 객체를 전달하는 메서드와 전달된 객체를 저장할 변수 추가
// 리스너 객체 참조를 저장하는 변수
private var mListener: OnItemClickListener? = null
// OnItemClickListener 객체 참조를 어댑터에 전달하는 메서드
fun setOnItemClickListener(listener: OnItemClickListener?) {
mListener = listener
}
아이템 클릭 이벤트 핸들러 메서드에서 리스너 객체 메서드 호출
class ViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textView1: TextView
init {
itemView.setOnClickListener(object : View.OnClickListener() {
override fun onClick(v: View?) {
val pos = adapterPosition
// 리스너 객체의 메서드 호출
if (pos != RecyclerView.NO_POSITION) {
mListener.onItemClick(v, pos)
}
}
})
textView1 = itemView.findViewById(R.id.text1)
}
}
액티비티(또는 프래그먼트)에서 커스텀 리스너 객체 생성 및 전달
textAdapter.setOnItemClickListener(object : OnItemClickListener() {
fun onItemClick(v: View?, pos: Int) {
// 실행 내용
}
})
RecyclerView Click
lesslate.github.io/android/안드로이드-리사이클러뷰-클릭/
'Android > Reference' 카테고리의 다른 글
RecyclerView Scroll (0) | 2020.10.28 |
---|---|
Multi View Type RecyclerView (0) | 2020.10.28 |
xml에서 opacity(투명도) 넣기 (0) | 2020.10.28 |
screenOrientaion 지정 방법 (0) | 2020.10.28 |
Intent Filter (인텐트 필터) (0) | 2020.10.28 |