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

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

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 > RecyclerView' 카테고리의 다른 글

[Android] RecyclerView에서 페이징+삭제 처리하기 (with Room) #2  (0) 2023.01.09
[Android] RecyclerView에서 페이징 처리하기 #1  (0) 2022.12.16
[Android] Expandable RecyclerView 구현하기  (0) 2022.11.22
[Android] RecyclerView Drag and Drop 구현하기  (0) 2022.11.18
'Android/RecyclerView' 카테고리의 다른 글
  • [Android] RecyclerView에서 페이징+삭제 처리하기 (with Room) #2
  • [Android] RecyclerView에서 페이징 처리하기 #1
  • [Android] Expandable RecyclerView 구현하기
  • [Android] RecyclerView Drag and Drop 구현하기
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (79)
      • Android (56)
        • ADB (4)
        • AddView (1)
        • Architecture (1)
        • Bluetooth (2)
        • BuildConfig (1)
        • Calendar (3)
        • Camera (2)
        • Cipher (1)
        • Compose (1)
        • ConstraintSet (1)
        • DataStore (1)
        • Dialog (1)
        • DrawerLayout (1)
        • Flow (1)
        • Glide (1)
        • MQTT (2)
        • Paging3 (4)
        • Permission (1)
        • SharedPreferences (3)
        • RecyclerView (5)
        • Room (1)
        • Splash (1)
        • TabLayout (2)
        • TextWatcher (1)
        • Update (1)
        • 이슈 처리 (13)
      • Android Studio (5)
      • Firebase (1)
      • Git (3)
      • 작업 일지 (13)
  • 최근 글

  • 인기 글

  • 태그

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

    • GitHub
  • 블로그 메뉴

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

티스토리툴바