RecyclerView
RecyclerView 이해하기
재순환(재활용)뷰는 뷰 그룹의 서브 클래스 이다.
항목 뷰(item view) 라고 하는 자식 View 객체들의 리스트를 보여준다.
각 항목 View는 재순환(재활용)뷰의 행으로 나타나며 데이터 저장소에서 가져온 하나의 객체를 나타낸다.
그렇다고 재순환뷰가 많은 양의 데이터를 물고서 보여주는 것이 아니다.
한 화면에 충분히 채워질 만큼의 데이터 카드(아이템)만 보여주고,
사용자가 스크롤을 하면 그 제스처 이벤트에 맞춰서 해당되는 부분의 데이터를 끌어와서 보여준다.
이렇게 하면 화면 흐름이 부드럽게 보여지는 것이다.
즉 View라는 아이템 바구니를 그대로 두고, 데이터만 싹 바꾸는 원리라고 보면 된다.
이렇게 하면, 아래에 나오는 ViewHolder 보다 BindViewHolder가 많이 불려지는 결과를 나타낸다.
이렇게 하면 시간과 메모리가 절약된다.
전체적인 재순환뷰의 구성은 아래 표와 위의 그림으로 이해하면 된다.
Holder | itemView | ⏩ | Recycler View |
⏩ | Adapter | ⏩ | List <data> |
⏪ | View Model ⏫ Data class |
⏪ |
onCreateViewHolder() | ||||||||
onBindViewHolder() | |||||||||
getItemCount() |
기본적인 RecyclerView는 위와 같이 구성되어 있다.
재순환(재활용)뷰(RecyclerView)에 아이템 목록들이 올라가는 원리는 아래와 같다.
Item View 와 ViewHolder 를 통해서 RecyclerView(재순환(재활용)뷰)에 보여지는 모습을 볼 수 있다.
ViewModel 과 RecyclerView
단순히 RecyclerView를 구현하는 것은 검색으로 찾아보기 쉽다.
그러나, Viewmodel에 적용하여 RecyclerView를 적용하고, 이를 Fragment로 올리는 방법이 명확하게 찾아지지 않았다.
본인이 이러한 함수들과 클래스에 정확한 이해가 없어서, 그런거 같았다.
기억해야할 것은 아래와 같다.
- 기본적으로 뷰모델은 데이터를 관리하는 것이다. 데이터 부분만 있으면 된다.
- 재순환(재활용)뷰를 가진 프래그먼트부분은 이러한 데이터를 가져다가, 재순환(재활용)뷰에 올린다.
데이터를 재순환(재활용)뷰에 올리는 방법은 무엇인가?
어찌저찌 뷰모델을 생성하여 데이터를 끌어오는 코드를 작성했다고 가정한다. (뷰모델을 불러오는 코드가 있어야 한다.)문제는 재순환(재활용)뷰가 올라가는 화면이 Fragment인 경우이다.
Fragment의 이해와 RecyclerView의 이해를 다 해야 한다. [Fragment의 실용적인 이해]
0. 재순환(재활용)뷰를 보여줄 프래그먼트에서 아래의 작업이 통합 진행된다.
1. onCreateView에 RecyclerView를 선언하여 사용할 수 있게 만든다.
2. Holder 클래스를 inner class로 생성하여 그 안에 재순환(재활용)뷰에 보여질 카드(아이템)의 요소들을 추가, 등록한다. - 프래그먼트 클래스 안에 따로 생성하는 것이다. 생명주기 함수들안에 생성하는 것이 아니다. - : RecyclerView.ViewHolder(view) 를 상속한다. - 즉, 카드(아이템)에 해당하는 layout을 생성하여 만들고 해당 레이아웃에 아이템들을 findviewbyid로 찾아오는 것이다.
3. Adapter 클래스를 inner class로 생성한다. :RecyclerView.Adapter<Holder클래스명> 상속한다. - 프래그먼트 클래스 안에 따로 생성하는 것이다. 생명주기 함수들안에 생성하는 것이 아니다. - adapter내부에 있는 세가지 함수를 불러온다. (onCreateViewHolder, onBindViewHolder, getItemCount) - onCreateViewHolder 에는 카드(아이템) 레이아웃을 연동해준다. - onBindViewHolder 에는 Holder에 있는 요소들에 데이터와 연동해준다. - getItemCount는 단순 데이터들의 수를 세준다. 카드들의 수를 알려준다보면 된다. (은근 필요함)
어댑터와 재순환(재활용)뷰의 소통을 통해, 순환뷰는 보여지게 된다 봐도 된다. 핵심적인 연결을 어댑터를 통해 진행함을 알 수 있기 때문이다.
'Programming > Android' 카테고리의 다른 글
Emulator(AVD) & Physical Device (0) | 2021.07.25 |
---|---|
Fragment (0) | 2021.07.23 |
JetPack (0) | 2021.07.22 |