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

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