-
[Android] RecyclerView 사용법안드로이드 2022. 3. 5. 21:17728x90반응형반응형
RecyclerView란
Android에서 List형태로 구성하고 싶을 때 사용하는 View입니다. 기존의 ListView는 커스텀하기에는 구조적인 문제로 많은 제약이 따랐으며, 구조적인 문제로 인해 성능 문제가 있었습니다. ViewHolder 패턴을 활용해 View를 재활용해 사용할 수 있어 메모리 관리에 매우 효율적입니다. 🔥
RecyclerView의 재활용성♻️
ListView와는 다르게 RecyclerView는 사용자가 스크롤 할 때마다 맨 위에 위치한 뷰 객체를 삭제하지 않고 아래쪽에서 새로 나타날 파란색 뷰 위치로 객체를 이동시킵니다. 즉 뷰 객체 자체를 재사용하는 것인데, 중요한 점은 뷰 객체를 재사용할 뿐이지 뷰 객체가 담고 있는 데이터는 새로 갱신되는 것이므로 효율적입니다.
주요 클래스👀
- RecyclerView.ViewHolder : RecyclerView에 보여지는 뷰 객체를 보관하는 Holder 객체입니다. RecyclerView는 inflate를 최소화하기 위해 뷰를 재사용하는데, 이때 각 뷰의 내용을 업데이트하기 위해 findViewById를 매번 호출해야 합니다. 이로 인해 성능 저하가 일어남에 따라 ItemView의 각 요소를 바로 액세스 할 수 있도록 저장해 두고 사용하기 위한 객체입니다.
class ViewHolder(view : View): RecyclerView.ViewHolder(view){ val textview = view.findViewById<TextView>(R.id.data_text) }
- LayoutManager : 우선 간단하게 스크롤을 위아래로 할지, 좌우로 할지 정하며 더 이상 표시되지 않는 뷰 객체를 재활용할 시기를 결정하는 역할을 합니다.
recyclerView.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
- RecyclerView.Adapter : RecyclerView에 보여질 데이터 리스트를 RecyclerView에 바인딩시켜주기 위한 사전작업이 이루어지는 객체입니다.
recyclerView.adapter = RecyclerViewAdapter(data)
RecyClerView.Adapter
- getItemCount : RecyclerView에 뿌려줄 아이템 항목의 개수를 반환하며 가장 먼저 호출됩니다.
override fun getItemCount(): Int = data.size
- onCreateViewHolder : getItemCount다음으로 호출되는 함수로 이름처럼 ViewHolder가 생성되는 함수입니다.
override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): ViewHolder { return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_layout,parent,false)) }
- onBindViewHolder : 생성된 ViewHolder에 데이터를 바인딩해주는 함수입니다.
override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = data[position] }
결과👇🏻
다음과 같이 RecyclerView에 데이터가 담겨서 스크롤하여 볼 수 있게 됩니다.👍🏻
출처
https://wooooooak.github.io/android/2019/03/28/recycler_view/
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko728x90반응형'안드로이드' 카테고리의 다른 글
[Android] Retrofit 쉼표로 구분된 값을 하나의 파라미터로 전송해야 할 때 (ID =1,2,3,4,5) (0) 2022.03.10 [Android] 안드로이드 View 성능 올리는 꿀팁 feat.Naver Tech Concert 2020 (0) 2022.03.08 [Android] LiveData란 (0) 2022.02.24 [Android]Glide 라이브러리를 통해 이미지 Load하기 (0) 2022.02.11 [Android] Android Context란? (0) 2022.02.07