[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
    • 분류 전체보기 (84)
      • Android (60)
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Firebase (2)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3)
        • 이슈 처리 (14)
      • Android Studio (5)
      • Git (3)
      • 작업 일지 (16)
  • 최근 글

  • 인기 글

  • 태그

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

    • GitHub
  • 블로그 메뉴

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

티스토리툴바