728x90
블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다.
조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자.
졸업 프로젝트에서는 다른 여타 프로젝트와 달리 RecyclerView에 대해서 사용할 일이 많았다.
그렇다면 RecyclerView에서 자주 사용하는 메서드 onCreateViewHolder와 onBindViewHolder의 차이에 대해서 알아보자.
onCreateViewHolder와 onBindViewHolder
class CommentAdapter(
private val onClickMenu: (CommentItemUiState) -> Unit
) :
ListAdapter<CommentItemUiState, CommentViewHolder>(diffCallback) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CommentViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = ItemCommentBinding.inflate(layoutInflater, parent, false)
return CommentViewHolder(binding, onClickMenu)
}
override fun onBindViewHolder(holder: CommentViewHolder, position: Int) {
holder.bind(currentList[position])
}
override fun submitList(list: List<CommentItemUiState>?) {
super.submitList(list)
}
companion object {
private val diffCallback = object : DiffUtil.ItemCallback<CommentItemUiState>() {
override fun areItemsTheSame(
oldItem: CommentItemUiState,
newItem: CommentItemUiState
): Boolean {
return oldItem.commentId == newItem.commentId
}
override fun areContentsTheSame(
oldItem: CommentItemUiState,
newItem: CommentItemUiState
): Boolean {
return oldItem == newItem
}
}
}
}
onCreateViewHolder:
- 역할: ViewHolder 객체를 생성하는 역할을 한다. 이 메서드는 새로운 ViewHolder를 생성하고, 이를 RecyclerView에 제공하여 사용할 수 있도록 한다.
- 호출 시점: RecyclerView가 새로운 아이템 뷰를 필요로 할 때 호출된다. 즉, ViewHolder가 아직 존재하지 않을 때 호출된다.
- 주요 작업: 여기서 새로운 View 객체를 생성하고, 그 View를 감쌀 새로운 ViewHolder 객체를 생성한다.
onBindViewHolder:
- 역할: ViewHolder와 데이터를 바인딩하는 역할을 한다. 즉, 주어진 위치의 데이터를 ViewHolder의 View에 설정한다.
- 호출 시점: RecyclerView가 특정 위치에 아이템을 표시할 때 호출된다. 이미 존재하는 ViewHolder를 재사용할 때 호출된다.
- 주요 작업: 여기서 ViewHolder의 View에 데이터를 설정한다.
차이점 요약
onCreateViewHolder는 리사이클러뷰가 만들어질때만 호출되나, onBindViewHolder는 스크롤을 내리거나 올릴때마다 호출된다.
실제 프로젝트
아래 동영상은 실제 리사이클러뷰 앱을 실행하고 스크롤을 쭈욱 내렸을 때 onCreateViewHolder와 onBindViewHolder가 언제 호출되는지를 확인해보았다.
처음에 onCreateViewHolder가 만들어지고 또한 스크롤을 내릴때마다 ViewHolder가 만들어지지 않은 Data들이 있을때마다 호출되는 모습을 보이며
onBindViewHolder는 화면에 해당 데이터가 보일때마다 호출되는 모습을 보이고 있다.
프로젝트 링크
https://github.com/ois0886/Android_Side_Projects/tree/main/RecyclerViewStudy
728x90
'Android > Study' 카테고리의 다른 글
[Android] ConstraintLayout의 장점 (0) | 2024.06.11 |
---|---|
[Android] RecyclerView LayoutManager에 대해서 공부하자 (0) | 2024.06.10 |
[Android] DIP에 대해서 공부하자 (0) | 2024.06.09 |
[Android] A RecyclerView with multiple item types in Kotlin에 대해서 공부하자 (0) | 2024.06.09 |
[Android] SharedPreferences & 자동 로그인 구현 (0) | 2024.06.01 |