2021.12.30 - [AndroidStudio] - [Android Studio / Kotlin] RecyclerView Calendar 구현하기
지난번에 다뤘던 내용을 통해 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가 동작하지 않는 경우가 발생할 수도 있습니다. 그런 경우에는 아래 게시물을 참고하세요...!
728x90
반응형
'AndroidStudio > Kotlin' 카테고리의 다른 글
[AndroidStudio/Kotlin] recyclerView itemClickListener가 동작하지 않을 때 해결 방법 (0) | 2022.01.19 |
---|---|
[Android Studio / Kotlin] TextView 취소선 적용/ 취소하기 (0) | 2022.01.05 |
[Android Studio / Kotlin] RecyclerView Calendar 구현하기 (0) | 2021.12.30 |
[Android Studio / Kotlin] Splash 화면 구현하기 (0) | 2021.12.21 |
[Android Studio / Kotlin] Bottom Navigation Bar 추가하기 (0) | 2021.12.21 |