구글링을 통해 onBindViewHolder에서 뷰의 리스너를 생성하는 방법이 좋지 않다는 것을 알게 되었습니다.
하지만 제가 만약 아래코드와 같이 repoList데이터를 이용하여 view마다 다르게 리스너를 설정해주어야 한다면 이때도 onBindViewHolder메서드가 아닌 ViewHolder클래스에서 해주는게 더 나은 방법일까요?
override fun onBindViewHolder(holder: FriendRepoListHolder, position: Int) {
holder.apply {
repoList[position].apply {
binding.friendActivityRepositoryTextview.text = "${this.owner}/${this.name}"
binding.friendActivityRepositoryLinearView.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://github.com/${this.owner}/${this.name}")
)
itemView.context.startActivity(intent)
}
}
}
}
위의 코드를 아래와 같이 바꾸어 주었을 때 이점이 무엇인지 정확히 이해하지 못하겠습니다.
inner class FriendRepoListHolder(val binding: RecyclerViewItemFriendRepoListBinding) :
RecyclerView.ViewHolder(binding.root) {
init {
binding.friendActivityRepositoryLinearView.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://github.com/${repoList[bindingAdapterPosition].owner}/${repoList[bindingAdapterPosition].name}")
)
itemView.context.startActivity(intent)
}
}
fun bind(item: Repositories) {
binding.friendActivityRepositoryTextview.text = "${item.owner}/${item.name}"
}
}
override fun onBindViewHolder(holder: FriendRepoListHolder, position: Int) {
holder.bind(repoList[position])
}