본문 바로가기

[Android] Recyclerview item Click / Click Listener 등록하는 법

@hyeon.s2022. 11. 1. 11:23

Recyclerview item Click / Click Listener 등록하는 법

RecyclerView의 클릭이벤트는 onBindViewHolder 함수에서 setOnClickListener를 통해서도 구현할 수 있고, 외부에서 click 이벤트를 정의하고싶다면 리스너 인터페이스를 만들 수도 있다.

 

이 게시물에서는 외부에서 item click시 발생되는 이벤트를 정의하기 위해 리스너 인터페이스를 만드는 방법을 알아보고자 한다.

리스너를 만들면서도 리스너에 대해 잘 모르는거같아서 찾아보았다.

Listener란?

  • 리스너는 특정 이벤트를 처리하는 인터페이스로 추상메서드를 받아 실행하며 이벤트 핸들러라고도 불린다.

RVAdapter에서 Click Listener 만드는 법:

1️⃣ interface를 만든다.

interface OnItemClickListener{
	fun onClick(v:View,position:Int)
} //onClick 함수는 클릭시 발생시킬 이벤트를 작성하는 함수로 외부에서 오버라이드 해줘야하는 함수이다.  

2️⃣ 사용자가 정의한 listener를 받아올 변수를 만든다.

private lateinit var itemClickListener : OnItemClickListener

3️⃣ 사용자가 정의한 listener를 변수에 set 하는 함수를 만든다.

fun setItemClickListener(onItemClickListener: OnItemClickListener)
    {
        this.itemClickListener = onItemClickListener
    }
  • 이렇게 3단계를 거치면 RVAdapter에서는 준비가 완료되었다. 이제 RV를 띄우는 Class에서 클릭시 나타날 이벤트를 onClick 함수로 오버라이드 해주면된다.

RV 있는 Activity Class 에서 listener set하기:

  • 해당 RVAdapter에 set할 listener 매개변수를 익명함수의 형태로 나타낸다.
//중략
binding.rvMemo.adapter = dataRVAdapter.apply{
                this.setItemClickListener(object: MemoRVAdapter.OnItemClickListener{
                    override fun onClick(v: View, position: Int) {
                        Log.e("summer","onClick함수 진입") 
                        // 이 부분에 클릭시 발생될 이벤트를 작성하면된다.
                    }
                })
            }
  • 이렇게하면 외부에서 RV item에 대한 click 이벤트를 처리할 수 있다!
  • interface를 만들어 직접 함수를 override 하기에 좀 더 자유롭게 사용 할 수 있는거같다.

참고: https://mechacat.tistory.com/7

hyeon.s
@hyeon.s :: 개발로그
목차