[Android] RecyclerView 클릭 이벤트 처리하기

2022. 11. 2. 10:42·Android/UI
반응형

RecyclerView의 Item을 클릭할 때 intent나 api 호출 등을 Adapter에서 처리한다고 번거로웠던 적이 있다.

이럴 때 interface를 통해 Activity나 Fragment에서 클릭 이벤트를 처리할 수 있다.

 

1. Interface 생성
2. Adapter에서 Interface에 대한 객체를 생성 및 초기화
3. Activity 또는 Fragment에서 override 하여 사용

예제로 아이템을 클릭했을 때 해당 아이템의 텍스트를 토스트로 띄워보려고 한다.


인터페이스 생성

interface SetOnClickListenerInterface {
    fun listItemClickListener(itemData: String, binding: ItemListMainBinding)
}

리스트를 클릭했을 때 필요한 데이터가 파라미터로 전달될 수 있도록 인터페이스를 작성한다.


인터페이스 객체 생성 및 초기화

class MainAdapter(private val mList: ArrayList<String>) : RecyclerView.Adapter<MainAdapter.ViewHolder>() {
	
    // interface 객체 생성
    private var onClickListener: SetOnClickListenerInterface? = null

    // Activity에서 호출 시 객체 초기화
    fun listItemClickFunc(pOnClick: SetOnClickListenerInterface) {
        this.onClickListener = pOnClick
    }

    inner class ViewHolder(private val itemViewBinding: ItemListMainBinding) : RecyclerView.ViewHolder(itemViewBinding.root) {
        fun bind(mItemData: String){
            itemViewBinding.tvName.text = mItemData

            // 클릭하고자 하는 view의 리스너에 데이터 전달
            if(adapterPosition != RecyclerView.NO_POSITION){
                itemViewBinding.ctMain.setOnClickListener {
                    onClickListener?.listItemClickListener(mItemData, itemViewBinding)
                }
            }
        }
    }
    // 생략
}

 

리스트의 아이템을 클릭하면 인터페이스 객체의 메서드를 호출하면서 해당 아이템의 데이터들을 전달하게 된다.


액티비티에서 처리

 mAdapter.listItemClickFunc(object: SetOnClickListenerInterface {
	override fun listItemClickListener(itemData: String, binding: ItemListMainBinding) {
		Toast.makeText(this@MainActivity, itemData, Toast.LENGTH_SHORT).show()
	}
})

어댑터에서 생성한 인터페이스 객체를 초기화 시켜주는 함수를 호출한다.

이때 인터페이스를 상속받는 익명 객체를 넘겨주는데, 인터페이스의 메서드를 오버라이드 하면서 액티비티에서 클릭 처리를 할 수 있다.


아이템을 클릭했을 때 해당 text를 토스트로 띄움

 

전체 코드

 

Android_Study/Recyclerview ClickListener in Activity at master · OhGyong/Android_Study

안드로이드 개발 공부. Contribute to OhGyong/Android_Study development by creating an account on GitHub.

github.com

반응형

'Android > UI' 카테고리의 다른 글

[Android] ViewPager2로 TabLayout 구성하기  (0) 2022.11.21
[Android] Fragment 하나로 TabLayout 구성하기  (0) 2022.11.20
[Android] RecyclerView Drag and Drop 구현하기  (0) 2022.11.18
[Android] 카메라 캡처(촬영)하기 - CameraX ˙ ImageCapture  (0) 2022.11.14
[Android] 카메라 미리보기 - CameraX · PreviewView  (0) 2022.11.09
'Android/UI' 카테고리의 다른 글
  • [Android] Fragment 하나로 TabLayout 구성하기
  • [Android] RecyclerView Drag and Drop 구현하기
  • [Android] 카메라 캡처(촬영)하기 - CameraX ˙ ImageCapture
  • [Android] 카메라 미리보기 - CameraX · PreviewView
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (81) N
      • Android (58) N
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3) N
        • 이슈 처리 (14)
      • Android Studio (5)
      • Firebase (2)
      • Git (3)
      • 작업 일지 (13)
  • 최근 글

  • 인기 글

  • 태그

    paging
    flow
    Pagination
    github
    compose
    issue
    MQTT
    hilt
    in-app update
    Kotlin
    Android
    Room
    ADB
    Navigation
    recyclerview
    loading
    BLE
    Paging3
    SharedPreferences
    firebase
    해상도
    webview
    CalendarView
    TabLayout
    Bluetooth
    Andoird
    CameraX
    Android Studio
    GIT
    kizitonwose
  • 링크

    • GitHub
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.4
O_Gyong
[Android] RecyclerView 클릭 이벤트 처리하기
상단으로

티스토리툴바