๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๊ธฐ๋ก/Filmo ์˜ํ™” ํ”„๋กœ์ ํŠธ

Android recyclerview ์ดํ•ดํ•˜๊ธฐ!!!

by hyeonha 2024. 4. 29.

recyclerview์— ๋Œ€ํ•ด์„œ ์‚ฌ์šฉ๋ฒ•์„ 

1๏ธโƒฃActivity ํด๋ž˜์Šค

๐Ÿซฑ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋Œ‘ํ„ฐ์— ๋„˜๊ฒจ์ฃผ๋ฉฐ ์–ด๋Œ‘ํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑ

๐Ÿซฑ๋ ˆ์ด์–ด๋“œ ํŒŒ์ผ์— ์ •์˜ํ•ด์ค€ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์˜ ์–ด๋Œ‘ํ„ฐ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

๐Ÿซฑ๋ฐ์ดํ„ฐ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•  ์ง€ layoutManager๋ฅผ ํ†ตํ•ด ๊ฒฐ์ • 

๊ฐ ์•„์ดํ…œ์˜ ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„

Adapter 

๐Ÿซฑ์ธ์ž์™€ ์ƒ์†

์–ด๋Œ‘ํ„ฐ๋Š” ์šฐ์„  ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. 

๊ทธ๋ฆฌ๊ณ  RecyclerView.Adapter<๋ทฐ ํ™€๋” ํด๋ž˜์Šค>๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•œ๋‹ค.

 

์–ด๋Œ‘ํ„ฐ์— ๊ผญ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผํ• ๊นŒ? ์–ด๋Œ‘ํ„ฐ ๋‚ด๋ถ€์—์„œ ๊ทธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

๐Ÿซฑ๊ตฌํ˜„ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ

๐ŸซฑonBindViewHolder

ViewHolder

๐Ÿซฑ์šฐ์„  ๊ฐ ์•„์ดํ…œ์— ๋Œ€ํ•œ ๋ ˆ์ด์•„์›ƒ์„ inflate ํ•ด์ค€๋‹ค.


๋ ˆ์ด์•„์›ƒ inflate์˜ ์˜๋ฏธ๋Š”?

๋”๋ณด๊ธฐ


๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์— ์ •์˜ํ•ด์ค€ ๋‚ด์šฉ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉํ•˜๊ณ  ์ด๋ฅผ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณผ์ •์ด๋‹ค.
์ฆ‰ xml ๊ฐ์ฒดํ™”!!


ํด๋ฆญ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

 

// ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ 
rvAdapter.itemClick =
            object : ContentRVAdapter.ItemClick {
                override fun onClick(
                    view: View,
                    position: Int,
                ) {

                  Toast.makeText(baseContext, items[position].title, Toast.LENGTH_SHORT).show()
                  //์ถ”๊ฐ€ ๋กœ์ง ๊ตฌ์„ฑํ•ด์ฃผ๊ธฐ

                }
            }
   // Adapter ๋‚ด๋ถ€์—์„œ 
   interface ItemClick {
        fun onClick(
            view: View,
            position: Int,
        )
    }

    var itemClick: ItemClick? = null

// onBindViewHolder ๋‚ด๋ถ€์—์„œ
  if (itemClick != null) {
            holder.itemView.setOnClickListener {
                    v ->
                itemClick?.onClick(v, position)
            }
        }

๐Ÿค—๋ฉ”์ธ ํŽ˜์ด์ง€ ํ™”๋ฉด์— ์ ์šฉํ•˜๊ธฐ

์ด ์—๋Ÿฌ๊ฐ€ ๋ญ˜๊นŒ? 

 Backing property name is only allowed when a matching public property or function exists (cannot be auto-corrected)

 

๐Ÿ”ฅ์—๋Ÿฌ

๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋œจ๋Š” ๊ฒƒ์€ ์„ฑ๊ณตํ–ˆ์œผ๋‚˜ ๋ฐ”์ธ๋”ฉ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ๋ณด์ด๊ณ  ์žˆ๋‹ค..!!

 

๋ทฐํ™€๋”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. 

๋ทฐ ์š”์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋กœ์ง์„ ๋นผ๋จน์–ด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค. ์ง€๊ธˆ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•จ์„ ํ™•์ธํ•˜์˜€๋‹ค! 

 

ํ™•์ธ์„ ์œ„ํ•ด์„œ ๋ทฐ๋ชจ๋ธ ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌ ํ›„ ์‹คํ–‰์‹œ์ผฐ๋”๋‹ˆ ์ •์ƒ ์ž‘๋™๋˜์—ˆ๋‹ค. ๋ทฐ๋ชจ๋ธ ์ฝ”๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋“ฏํ•˜๋‹ค. 

@AndroidEntryPoint
class ReviewFragment :
    Fragment() {
//    private val reportViewModel by viewModels<ReportViewModel>()
    private lateinit var binding: FragmentMovieReviewBinding

    @Inject lateinit var reportRepository: ReportRepository
728x90