학습 - RecyclerView
📚 Recycler View
👀 Recycler View 란?
-
"사용자가 관리하는 많은 수의 데이터 집합(Data Set)을 개별 아이템 단위로 구성하여 화면에 출력하는 뷰그룹(ViewGroup)이며, 한 화면에 표시되기 힘든 많은 수의 데이터를 스크롤 가능한 리스트로 표시해주는 위젯"입니다.
-
RecyclerView 이름에서 알 수 있듯이 View를 감싸는 컨테이너인 View Holder를 재활용하는 클래스(라이브러리)이며, View Holder 에 담긴 View를
ItemView
라고 합니다. -
기능을 봤을 때는 ListView와 유사해 보이나, ListView 보다 성능과 유연성을 높인 ListView의 확장판이라 생각하시면 됩니다.
👀 Recycler View 장점
-
ListView 의 경우, ViewHolder 패턴을 선택적으로 이용하기 때문에 ViewHolder 패턴을 사용하지 않을 경우 데이터가 갱신될 때마다 매번 ItemView를 구성하기 때문에 성능이 저하될 수 있는 문제가 발생했습니다.
즉, ItemView가 많아지면 ItemView를 생성하는 속도가 느려지는 문제가 발생합니다.
-
만약 ViewHolder 패턴을 ListView에 적용하고 싶다면, 기능을 재구성하거나 복잡한 코드를 짜야합니다.
-
RecyclerView 는 ViewHolder 패턴을 반드시 사용하기 때문에, 사용자가 눈에 보이는 화면의 View 만 데이터를 바인딩하여 보여주어 성능적으로 더 뛰어납니다.
-
또한 기본적으로 ListView은 수직 방향으로만 View를 배치할 수 있었지만, RecyclerView는 수직, 수평, 그리드, 모양이 다른 그리드 형식으로 배치할 수 있고 런타임 때 이를 변경할 수도 있어 더 유연하게 View를 배치할 수 있습니다.
👀 Recycler View 구성
- LayoutManager
-
ItemView 의 위치를 올바르게 배치하도록 돕는 클래스
-
ItemView 가 나열되는 형식을 관리해주는 클래스
👉 배치 종류
1. 리니어(LinearLayoutManager) : 수평(Horizontal) 또는 수직(Vertical) 방향, 일렬(Linear)로 아이템 뷰 배치.
2. 그리드(GridLayoutManager) : 바둑판 모양의 격자(Grid) 형태로 아이템 뷰 배치.
3. 스태거드그리드(StaggeredGridLayoutManager) : 엇갈림(Staggered) 격자(Grid) 형태로 아이템 뷰 배치.
- Adapter
-
ViewHolder 를 생성
-
ViewHolder 에 데이터 목록을 바인딩하여 ItemView 를 생성 (= 데이터 목록을 바인딩하여 ItemView 를 생성하고 이를 ViewHolder 에 담아 화면에 표시)
-
Data Set이 변경되었을 때 RecyclerView에게 알리는(=notify) 작업도 담당
-
유저가 ItemView를 클릭할 때 발생하는 상호작용(=클릭 리스너) 처리 작업도 담당합니다.
-
RecyclerView를 구성하는 ItemView의 형태(=ViewType)가 동일하지 않고 다른 경우를 처리하는 작업도 Adapter가 담당합니다.
- Recycler Viewer
-
새로운 ViewHolder 인스턴스 생성을 어댑터에게 요청
-
지정된 위치의 데이터항목에 ViewHolder를 바인딩하도록 어댑터에 요청
-
RecyclerViewer의 관심사
- RecyclerView는 View에 관심없고 ViewHolder에 관심있다.
즉, RecyclerViewer 는 데이터를 몰라야 한다.
대신 Adapter에 ViewHolder에 생성 요청 또는 데이터를 바인딩하도록 요청을 한다
- RecyclerView는 View에 관심없고 ViewHolder에 관심있다.
- View Holder
-
ItemView 를 저장하는 클래스
-
ViewHolder는 itemView의 참조를 가짐
-
어댑터에 의해 관리되는데, 필요에 따라(좀 더 정확히는, 레이아웃매니저의 아이템 뷰 재활용 정책에 따라) 어댑터에서 생성됩니다. 물론, 미리 생성된 뷰홀더 객체가 있는 경우에는 새로 생성하지 않고 이미 만들어져 있는 뷰홀더를 재활용하는데, 이 때는 단순히 데이터가 뷰홀더의 아이템 뷰에 바인딩(Binding)됩니다.
👀 Recycler View 구현 순서
-
Activity 또는 Fragment에 RecyclerViewLayout 배치
-
ItemView Layout 생성
-
Adapter 구현
- ViewHolder 클래스 구현
- 필요한 메서드 오버라이드하기
- onCreateViewHolder(ViewGroup parent, int viewType) : viewType 형태의 아이템 뷰를 위한 뷰홀더 객체 생성.
- onBindViewHolder(ViewHolder holder, int position) : position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시.
- getItemCount() : 전체 아이템 갯수 리턴.
-
Adapter, LayoutManager 지정
👀 Recycler View 데이터 갱신
-
notifyDataSetChanged : 화면의 모든 item을 즉시 redraw
-
poorperformance,복잡한 계산 or 사용자가 스크롤링을 동시에 하는 경우 등flicker현상이 나타나거나 스크롤이 버벅이는현상을 경험할 수 있다.
-
update가 필요한 위치만 RecyclerView에 정확히 알려줄 필요가 있다
-
👀 참고 사이트
- 공식문서
- 블로그
Author And Source
이 문제에 관하여(학습 - RecyclerView), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cherrylime69/안드로이드-학습-RecyclerView저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)