본문 바로가기
AndroidStudio/Kotlin

[AndroidStudio/Kotlin] recyclerView onItemClickListener 구현하기

by D.B_18 2022. 1. 19.

2021.12.30 - [AndroidStudio] - [Android Studio / Kotlin] RecyclerView Calendar 구현하기

 

[Android Studio / Kotlin] RecyclerView Calendar 구현하기

오늘은 RecyclerView를 이용하여 간단하게 달력을 구현해보도록 하겠습니다. 가로 방향으로 슬라이드하면 날짜를 볼 수 있는 형태로 구현했습니다. 우선 달력이 나오도록 할 화면에 recyclerView를 추

codingdiary99.tistory.com

지난번에 다뤘던 내용을 통해 todo list를 구현해봤습니다.

이제 리스트에서 원하는 항목을 클릭했을 때 checkbox가 활성화/비활성화 되도록 구현해보려고 합니다.

이 기능을 구현하기 위해서는 recyclerview의 itemClick Listener를 작성해야 합니다.

1. Adapter에 itemClickListener 구현

class MemoAdapter(private val dataSet: ArrayList<String>): RecyclerView.Adapter<MemoAdapter.ViewHolder>() {
    private lateinit var itemClickListener : OnItemClickListener

    class ViewHolder(view: View): RecyclerView.ViewHolder(view) {
        //TODO
    }

	// itemClickListener
    interface OnItemClickListener {
        fun onClick(view: View, position: Int) {
            // recyclerview의 item을 클릭했을 때 수행할 동작
            val memoCheck: CheckBox = view.findViewById(R.id.memo_check)
            memoCheck.toggle() // checkBox 활성화/비활성화
        }
    }

	// itemClickListener setter
    fun setItemClickListener(onItemClickListener: OnItemClickListener) {
        this.itemClickListener = onItemClickListener
    }

    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.memo_cell, viewGroup, false)

        //TODO

        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        //TODO
        
	// itemClickListener에 onClick 등록
        holder.itemView.setOnClickListener {
            itemClickListener.onClick(it, position)
        }
    }

}

2. fragment 혹은 activity에서 onClickListener Adapter에 등록

class MemoFragment : Fragment() {
    private val listAdapter = MemoAdapter(MemoList.memoList)
    private lateinit var memoList: RecyclerView
    lateinit var mLayoutManager: LinearLayoutManager

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_memo, container, false)

        mLayoutManager = LinearLayoutManager(view.context)
        memoList = view.findViewById(R.id.memo_list)

        setListView()
        setOnClickEvent()

        return view
    }

    private fun setListView() {
        MemoList.memoList.add("exercise") // todoList에 exercise 메모 추가

        memoList.adapter = listAdapter
        // TODO
    }

    private fun setOnClickEvent() {
    	// Adapter에 itemClickListener 등록
        listAdapter.setItemClickListener(object: MemoAdapter.OnItemClickListener {
            override fun onClick(view: View, position: Int) {
                super.onClick(view, position) // 미리 정의해둔 onClick 호출
                listAdapter.notifyDataSetChanged() // 리스트 새로고침
            }
        })
    }
}

 

다 코드를 작성했는데 저처럼 체크박스가 포함된 recyclerView를 구현했다면 onClickListener가 동작하지 않는 경우가 발생할 수도 있습니다. 그런 경우에는 아래 게시물을 참고하세요...!

2022.01.19 - [AndroidStudio] - [AndroidStudio/Kotlin] recyclerView itemClickListener가 동작하지 않을 때 해결 방법

 

[AndroidStudio/Kotlin] recyclerView itemClickListener가 동작하지 않을 때 해결 방법

2022.01.19 - [AndroidStudio] - [AndroidStudio/Kotlin] recyclerview itemClick 구현하기 [AndroidStudio/Kotlin] recyclerview itemClick 구현하기 2021.12.30 - [AndroidStudio] - [Android Studio / Kotlin]..

codingdiary99.tistory.com

728x90
반응형