티스토리 뷰

안드로이드

RecyclerView와 Adapter

pjm1n 2025. 4. 28. 15:34

❓RecyclerView

많은 양의 데이터를 효율적으로 스크롤하면서 보여줄 수 있는 뷰이다.

  • 기존의 Listview보다 성능과 유연성이 뛰어니다.
  • View를 재활용해서 메모리 낭비를 줄인다.
  • 데이터가 변경되면 Adapter를 통해 화면을 업데이트한다.

❓ RecyclerView와 ListView

RecyclerView처럼 ListView도 재활용은한다. 하지만 ListView는 뷰를 재활용할 때 getView메서드의 convertView를 이용해서 직접 수동으로 관리해주어야하지만 RecyclerView는 내부적으로 ViewHolder 패턴을 강제 적용해서 최적화를 해준다.

❓Adapter

기본적으로 데이터와 뷰의 연결 역할을 하는 클래스이기 때문에, 어떤 뷰에 데이터 리스트를 표시하고자 할 때 쓰인다.

  • ListView
  • GridView
  • Spinner
  • ViewPager 등

❓RecyclerView.Adapter class

🙌 필수 메서드(override)

  1. onCreateViewHolder
  • ViewHolder를 만들어서 반환한다.
  • RecyclerView의 아이템 레이아웃(XML)을 inflate해서 ViewHolder에 담아서 반환한다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
    return MyViewHolder(itemView)
}
  1. onBindviewHolder
  • ViewHolder에 데이터를 바인딩한다.
  • position을 통해 어떤 데이터 항목을 표시할지 결정한다.
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    val item = data[position]
    holder.bind(item)
}
  1. getItemCount
  • 전체 데이터 항목의 수를 반한한다.
  • 데이터의 개수를 반환해서 Recyclerview가 얼마나 많은 항목을 표시할지 알 수 있게 한다.
override fun getItemCount(): Int {
    return data.size
}

🖥️ 전체 코드 예시

class MyAdapter(private val data: List<MyItem>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    // ViewHolder 클래스 정의
    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val title: TextView = itemView.findViewById(R.id.title)
        private val description: TextView = itemView.findViewById(R.id.description)

        fun bind(item: MyItem) {
            title.text = item.title
            description.text = item.description
        }
    }

    // onCreateViewHolder - ViewHolder 생성
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
        return MyViewHolder(itemView)
    }

    // onBindViewHolder - 데이터 바인딩
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = data[position]
        holder.bind(item)
    }

    // getItemCount - 데이터 개수
    override fun getItemCount(): Int {
        return data.size
    }
}

 

끗.

'안드로이드' 카테고리의 다른 글

LifeCycle Of ViewModel  (1) 2025.10.05
Android Thread 통신과 Handler·Looper  (4) 2025.08.29
DataBinding, BindingAdapter를 사용할 때 무한루프  (2) 2025.08.02
ViewModel Test  (7) 2025.07.27
안드로이드 컴포넌트  (0) 2024.07.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함