룬아님의 취중코딩

3. 안드로이드 개발 레벨업 교과서 (RecyclerView) 본문

개발/안드로이드 개발 레벨업 교과서

3. 안드로이드 개발 레벨업 교과서 (RecyclerView)

룬아님 2019. 8. 20. 00:54

RecyclerView

RecylerView는 몇 가지 부품으로 구성됩니다. RecyclerView를 이용하려면 최소한 Adapter와 ViewHolder를 만들 필요가 있습니다. LayoutManager라는 레이아웃을 관리하는 클래스는 기본으로 몇 가지 준비돼 있으므로 보통은 그 클래스를 이용합니다.

 

 


RecyclerView.Adapter

RecyclerView.Adapter를 상속하는 클래스를 만들어 사용합니다. View를 만들고, 표시되는 View와 데이터를 연결합니다.

 

 


RecyclerView.ViewHolder

일반적으로 Adapter 내에서 RecyclerView.ViewHolder를 상속하는 클래스를 만듭니다. ViewHolder는 View에 대한 참조를 유지합니다. Adapter의 onCreateViewHolder() 메서드로 ViewHolder의 인스턴스를 생성해서 반환합니다. 그리고 onBindViewHolder() 메서드로 ViewHolder에 설정한 View에 데이터를 설정합니다. ViewHolder의 멤버 변수에 View를 저장해 둠으로써 findViewById()를 매번 실행할 필요하 없어지고 성능이 향상됩니다.

 

 


RecyclerView.LayoutManager

레이아웃 매니저는 RecyclerView에서 View의 위치와 크기를 결정하고 View의 재사용 규칙을 관리합니다. RecyclerView에는 다음과 같은 3가지 레이아웃 매니저가 있습니다.

  • LinearLayoutManager : 기본으로 아이템을 한 줄로 나열합니다.
  • GridLayoutManager : 아이템을 격자(Grid) 형태로 나열합니다.
  • StaggeredGridLayoutManager : 크기가 일정하지 않은 아이템을 격자 형태로 나타냅니다.

 


RecyclerView 레이아웃을 만드는 흐름

ViewGroup구조로 RecyclerView에서 onLayout() 메서드를 호출해 LayoutManager에 처리를 맡깁니다. LayoutManager는 필요해진 아이템의 ViewHolder를 Adapter로부터 가져오고, Adapter에서 ViewHolder에 필요한 데이터를 설정하게 됩니다.

 

 


뷰의 재사용

RecyclerView에서는 View를 목록으로 표시합니다. RecyclerVIew에서는 스크롤해서 필요 없어진 View를 ViewHolder로서 Scrap 리스트에 추가합니다. 그리고 스크롤로 ViewHolder 안의 View에 Adapter로 데이터를 설정하고, 다음으로 필요해진 View를 꺼내 표시합니다.

 

RecyclerView에서 View의 재사용

 

* RecyclerView 자체의 크기가 변하지 않는 것을 알고 있을 때 이 옵션을 설정하면 성능이 개선됩니다.

recyclerView.setHasFixedSize(true);

https://developer.android.com/training/custom-views/optimizing-view.html

위 링크는 requestLayout을 호출하는 것이 비용이 많이 드는 이유를 설명합니다. 기본적으로 항목이 삽입, 이동 또는 제거 될 때마다 RecyclerView의 크기 (너비 및 높이)가 변경 될 수 있으며 뷰 계층의 다른보기 크기가 변경 될 수 있습니다. 항목이 자주 추가되거나 제거되는 경우 특히 문제가됩니다.

그렇기 때문에 RecyclerView에서 항목을 추가하거나 제거 할 때 setHasFixedSize를 true로 설정하면 높이 또는 너비가 변경되지 않을 때 불필요한 레이아웃 과정을 피할 수 있습니다.

반응형
Comments