[ ์•ˆ๋“œ๋กœ์ด๋“œ - ์ฝ”ํ‹€๋ฆฐ ] RecyclerView ํด๋ฆญ ์œ„์น˜๋ฅผ Fragment์—์„œ ํ™•์ธํ•˜๊ธฐ

2023. 2. 9. 17:36ใ†Android

๐Ÿคท๐Ÿป‍โ™‚๏ธ ๋ฌธ์ œ์ 

- ๊ฐœ๋ฐœ ๋„์ค‘ ์ด์ค‘ ๋ฆฌ์‚ฌ์ดํด๋ ค ๋ทฐ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ (์œ ํŠœ๋ธŒ, ์š”๊ธฐ์š”, ๋ฐฐ๋ฏผ, ๋„ค์ด๋ฒ„๋“ฑ์— ์กด์žฌํ•˜๋Š” ์ƒ๋‹จ ์„ ํƒ๋ฐ”๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด) ์ง€๊ธˆ ๋ฆฌ์‚ฌ์ดํด๋ ค ๋ทฐ์—์„œ ํด๋ฆญํ•œ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด์•ผ๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ ๋ทฐ ์ด๋ฒคํŠธ๋ฅผ ์–ด๋Œ‘ํ„ฐ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•ด ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์—†์—ˆ๋‹ค 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

- ์–ด๋Œ‘ํ„ฐ ๋‚ด์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ํด๋ฆญํ•œ ์ด๋ฐดํŠธ์˜ position์„ ์™ธ๋ถ€๋กœ ๋ณด๋‚ด์ค˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์คฌ๋‹ค

-> ์ถ”๊ฐ€์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” xml์— Chip ์œ„์ ฏ์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค ๐Ÿ˜ค

class TopScrollRecyclerAdapter(val dataList: Array<String>, spinnerData: String, val context: Context, binding: FragmentMapBinding) : 
RecyclerView.Adapter<TopScrollRecyclerAdapter.TopScrollHolder>(){

    private val call by lazy { Retrofit_API.getInstance() }

    val intent = Intent(context, PickActivity::class.java)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopScrollHolder {
        val binding = ScrollItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)

        return TopScrollHolder(binding)
    }

    override fun onBindViewHolder(holder: TopScrollHolder, position: Int) {

        holder.btn_name.text = dataList[position]

        holder.itemView.setOnClickListener {
            itemClickListener.onClick(it, position)
        }

    }
    // (2) ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค
    interface OnItemClickListener {
        fun onClick(v: View, position: Int)
    }
    // (3) ์™ธ๋ถ€์—์„œ ํด๋ฆญ ์‹œ ์ด๋ฒคํŠธ ์„ค์ •
    fun setItemClickListener(onItemClickListener: OnItemClickListener) {
        this.itemClickListener = onItemClickListener
    }
    // (4) setItemClickListener๋กœ ์„ค์ •ํ•œ ํ•จ์ˆ˜ ์‹คํ–‰
    private lateinit var itemClickListener : OnItemClickListener

    override fun getItemCount(): Int {
        return dataList.size
    }

    class TopScrollHolder(binding: ScrollItemBinding) : RecyclerView.ViewHolder(binding.root){
        val btn_name : TextView = binding.scrollBtn

    }
}

 

Fragment ๋‚ด์—์„œ ํด๋ฆญ ์ด๋ฒคํŠธ position์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค 

๋ฐฐ์—ด์„ ํ†ตํ•ด ํ•ด๋‹น position์— ํ•„์š”ํ•œ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋„ฃ์–ด ๊ฐ€์ ธ์˜จ๋‹ค

val topAdapter = TopScrollRecyclerAdapter(topData, mainActivity)
// ์ƒ๋‹จ ์Šคํฌ๋กค ๋ฒ„ํŠผ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ ๋ทฐ
topRecyclerView.adapter = topAdapter
topAdapter.setItemClickListener(object : TopScrollRecyclerAdapter.OnItemClickListener {
    override fun onClick(v: View, position: Int) {
        val category = arrayOf(0, 1, 3, 5, 2, 4, 6)
        t_position = category[position]
        spinner!!.visibility = View.VISIBLE
        retrofit("desc", t_position.toString())
    }
})