- ์ฝ๋
- RecyclerView์ adapter๋ฅผ ์ง์ด๋ฃ๊ณ layoutManager ๋ฃ์ด์ฃผ๊ธฐ
val adapter = MyAdapter(dataList)with(binding.recyclerView){ // binding.recyclerView.adapter = adapter //์๋์ ์ฝ๋์ ๊ฐ์ this@with.adapter = adapter layoutManager = LinearLayoutManager(this@MainActivity) }
ListView
: ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋๋ง๋ค ์์ ์๋ ์์ดํ
์ ์ญ์ ๋๊ณ ๋งจ ์๋์ ์์ดํ
์ ์์ฑ ๋๊ธธ ๋ฐ๋ณต๋๋ค.
๋ง์ฝ ์์ฑํ ์์ดํ
์ด 100๊ฐ๋ฉด ์ฒ์๋ถํฐ 100๊ฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
๊ณ์ ์ญ์ ์ ์์ฑ์ ๋ฐ๋ณตํ๋ฏ๋ก ์ฑ๋ฅ์ ์ข์ง ์๋ค.
RecyclerView
์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋ ์์ ์๋ ์์ดํ
์ ์ฌํ์ฉ ๋ผ์ ์๋๋ก ์ด๋ํ์ฌ ์ฌ์ฌ์ฉํ ์ ์๋ค.
์์ดํ
์ด 100๊ฐ์ฌ๋ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๊ฐ์(10๊ฐ ์ ๋)์ View๋ง ๋ง๋ค๊ณ 10๊ฐ๋ฅผ ์ฌํ์ฉํด์ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ์ RecyclerView ์ฌ์ด์ ์กด์ฌํ๋ ๊ฐ์ฒด
๋ฐ์ดํฐ ํ
์ด๋ธ์ ๋ชฉ๋ก ํํ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ
์ด๋ํฐ ํด๋์ค ๋ด๋ถ์ ์ ์ํจ
ํ๋ฉด์ ํ์๋ ๋ฐ์ดํฐ๋ ์์ดํ
๋ค์ ์ ์ฅํ๋ ์ญํ
์ฌ์ฌ์ฉ๋๋ ๋ทฐ๋ฅผ ๊ธฐ์ตํ๊ณ ์์ด์ผ ํ๋ค.
์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์
1) getItemCount : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ํ์ํ ํญ๋ชฉ์ ์ด ๊ฐ์๋ฅผ ๋ฐํ
2) Holder : item_recyclerview ๋ ์ด์์์ ์๋ ๋ทฐ ํํ๋ก Holder๋ฅผ ๋ง๋ค์ด์ค
๋ทฐํ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋๋ฉฐ, ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ๊ฐ ํญ๋ชฉ์ ์ํ ๋ทฐ๋ฅผ ์ฐธ์กฐ
3) onCreateViewHolder : ๊ทธ๋ฌ๋ฉด onCreateViewHolder์์ ์์์ ๋ง๋ค์ด๋์ Holder๋ฅผ ์คํ์์ผ Holder๋ฅผ ๋ง๋ค์ด์ค
ViewHolder ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํ
4) onBindViewHolder : onBindViewHolder๊ฐ ์คํ๋๋ฉด์ ๋ฐ์ดํฐ๋ค์ด ํ๋ํ๋ ์คํ๋จ
๊ฐ ํญ๋ชฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํจ
์คํฌ๋กค์ ๋ด๋ฆฌ๋ฉด onCreateViewHolder๊ณผ onBindViewHolder๊ฐ ์ฐจ๋ก๋ก ์คํ๋จ
์์ 3๊ฐ ํจ์๋ฅผ implement ํ์ง ์์ผ๋ฉด ์๋ฌ๋จ
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ํญ๋ชฉ์ ๋ ์ด์์์ ์์ฑ
1) ์๋ณธ ๋ฐ์ดํฐ ์ค๋น.
์ฌ๊ธฐ์๋ MyItem ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์.
val dataList = mutableListOf<MyItem>()
dataList.add(MyItem(R.drawable.til_1, "Bella", "1"))
dataList.add(MyItem(R.drawable.til_1, "Charlie", "2"))
dataList.add(MyItem(R.drawable.til_1, "Daisy", "1.5"))
dataList.add(MyItem(R.drawable.til_1, "Duke", "1"))
2) Adapter๋ฅผ ๋ง๋ค์ด์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์
val adapter = MyAdapter(dataList)
3) RecyclerView์ adapter๋ฅผ ์ง์ด๋ฃ๊ณ layoutManager ๋ฃ์ด์ฃผ๊ธฐ
with(binding.recyclerView){
// binding.recyclerView.adapter = adapter //์๋์ ์ฝ๋์ ๊ฐ์
this@with.adapter = adapter
layoutManager = LinearLayoutManager(this@MainActivity)
}
ViewHolder์ bindํจ์๋ฅผ ์ฐ๋ฉด onBindViewHolder๊ฐ ๊น๋ํด์ง๋ค.
VideoHolder์์ ๋ณ์๋ฅผ private์ผ๋ก ์ ์ธํ๊ณ onBindViewHolder์์ bind ํจ์๋ก ์ฐ๋ฉด onBindViewHolder์์ holder๋ก ์์ดํ
ํ๋ํ๋ ์ค์ ํด์ฃผ์ง ์์๋ ๋๋ค.
override fun onBindViewHolder(holder: MyAdapter.Holder, position: Int) {
holder.itemView.setOnClickListener{
itemClick?.onClick(it, position)
}
holder.iconImageView.setImageResource(mItems[position].aIcon)
holder.name.text = mItems[position].aName
holder.age.text = mItems[position].aAge
}
inner class Holder(binding: ItemRecyclerviewBinding) : RecyclerView.ViewHolder(binding.root) {
val iconImageView = binding.iconItem
val name = binding.textItem1
val age = binding.textItem2
}
override fun onBindViewHolder(holder: MyAdapter.Holder, position: Int) {
val item = mItems[position]
holder.bind(item)
holder.itemView.setOnClickListener{
itemClick?.onClick(it, position)
}
}
inner class Holder(binding: ItemRecyclerviewBinding) : RecyclerView.ViewHolder(binding.root) {
private val iconImageView = binding.iconItem
private val name = binding.textItem1
private val age = binding.textItem2
fun bind(item: MyItem){
iconImageView.setImageResource(item.aIcon)
name.text = item.aName
age.text = item.aAge
}
}
RecyclerView๋ ๋จผ์ getItemCount๋ก ์ ์ฒด ํญ๋ชฉ์ ์๋ฅผ ํ์
ํ๊ณ , ํ์ํ ViewHolder๋ฅผ ์์ฑํ๊ธฐ ์ํด onCreateViewHolder๋ฅผ ํธ์ถํ๋ค.
๊ทธ ํ, ๊ฐ ํญ๋ชฉ์ ๋ฐ์ดํฐ๋ฅผ ํด๋น ๋ทฐ์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ํด onBindViewHolder๊ฐ ํธ์ถ๋๋ค.
์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ์ฌ ์ ํญ๋ชฉ์ด ํ๋ฉด์ ๋ํ๋ ๋๋ง๋ค onBindViewHolder๊ฐ ๋ค์ ํธ์ถ๋์ด ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ค์ ํ๋ค.
์ด๋ฏธ ์กด์ฌํ๋ ViewHolder๋ ์ฌ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ onCreateViewHolder๋ ํธ์ถ๋์ง ์๋๋ค.