https://jinsangjin.tistory.com/24?category=800560
class MyAdapter(private val myDataset: Array<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
//개별 아이템에 view 생성하여 제공
class MyViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
//실제로 표현될 item view 생성
override fun onCreateViewHolder(parent: ViewGroup,
viewType: Int): MyAdapter.MyViewHolder {
// 내가 표현하고 싶은(코드로 조작하고 싶은) 레이아웃을 inflate하고
val textView = LayoutInflater.from(parent.context)
.inflate(R.layout.my_text_view, parent, false) as TextView
//ViewHolder에 담아서 반환한다.
return MyViewHolder(textView)
}
//item에 데이터를 바인딩한다. 화면에 들어온 아이템에 대해서만 작업을 진행
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.textView.text = myDataset[position]
}
// item의 갯수를 반환한다.
override fun getItemCount() = myDataset.size
}
class PersonAdapter(val items: List<Person>,
private val clickListener: (person: Person) -> Unit) :
RecyclerView.Adapter<PersonAdapter.PersonViewHolder>() {
class PersonViewHolder(val binding: ItemPersonBinding): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PersonViewHolder {
// 리사이클러뷰에 사용할 아이템 각각
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_person, parent, false)
// 어댑터에 뷰를 제공하기 위해 틀에 집어넣는 느낌?
val viewHolder = PersonViewHolder(ItemPersonBinding.bind(view))
view.setOnClickListener {clickListener.invoke(items[viewHolder.adapterPosition])}
return viewHolder
}
override fun onBindViewHolder(holder: PersonViewHolder, position: Int) {
// xml에서 데이터 바인딩중인데, 거기에 값을 넣어줌(현재 화면에 보이는 값만)
holder.binding.person = items[position]
}
override fun getItemCount(): Int {
return items.size
}
}