본문 바로가기
앱 개발일지

[Android / Kotlin] 리사이클러뷰

by developer jini 2022. 7. 11.
728x90

RecyclerView 구성요소

- ViewHolder : 항목에 필요한 뷰 객체를 가짐

-Adapter : 항목을 구성

-LayoutManager : 항목을 배치

-ItemDecoration : 항목을 꾸밈

class MyViewHolder(private val binding: ItemMainBinding) : RecyclerView.ViewHolder(binding.root)
class MyAdapter(val binding: ItemMainBinding): RecyclerView.Adapter<RecyclerView.ViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        TODO("Not yet implemented")
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        TODO("Not yet implemented")
    }

    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }

}

*getItemCount(): 항목 개수를 판단하려고 자동으로 호출

*onCreateViewHolder : 항목의 뷰를 가지는 뷰 홀더를 준비하려고 자동으로 호출

*onBindViewHolder : 뷰 홀더의 뷰에 데이터를 출력하려고 자동 호출

- getItemCount 함수가 반환한 숫자만큼 onBindViewHolder 함수가 호출되어 항목을 생성.

-onCreateViewHolder 함수에서 반환하는 뷰 홀더 객체는 onBindViewHolder 함수의 매개변수로 전달.

 

<리사이클러뷰 사용>

package com.example.recyeclerview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.recyeclerview.databinding.ActivityMainBinding
import com.example.recyeclerview.databinding.ItemMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val datas = mutableListOf<String>()
        for (i in 1..10){
            datas.add("Item $i")
        }
        binding.recyclerView.layoutManager = LinearLayoutManager(this)
        binding.recyclerView.adapter = MyAdapter(datas)
        binding.recyclerView.addItemDecoration(DividerItemDecoration(this,LinearLayoutManager.VERTICAL))

    }


}
class MyViewHolder(val binding: ItemMainBinding) : RecyclerView.ViewHolder(binding.root)

class MyAdapter(var datas: MutableList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
         MyViewHolder(ItemMainBinding.inflate(LayoutInflater.from(parent.context),parent,false))


    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val binding = (holder as MyViewHolder).binding
        binding.itemData.text = datas[position]
        binding.itemRoot.setOnClickListener {
            // 이벤트
        }
    }

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

}
728x90

'앱 개발일지' 카테고리의 다른 글

[Android/ Kotlin] 팁 계산기  (0) 2022.07.21
[Android / Kotlin] 뷰페이저2  (0) 2022.07.11
[Android / Kotlin] 프래그먼트  (0) 2022.07.11
[Android/Kotlin] 액션바  (0) 2022.07.10
[Android Studio / Kotlin]리소스 활용  (0) 2022.07.05

댓글