개발일지
[Android] recyclerview 본문
- RecyclerView
→ 단지 recyclerview 항목 재활용하고 보여주는 역할
→ adapter 와 소통 (adapter 에게 ViewHolder 받음) - Adapter (실제 data 가지고 있음)
→ 필요한 ViewHolder 객체 생성하고 데이터를 ViewHolder 객체와 결합 - ViewHolder (화면에 표시되는 아이템 뷰 저장 )
→ 하나의 view 만들고 보관하는 일 // 재사용을 위해 목록에서 사라지는 뷰 임시저장
~onCreateViewHolder : ViewHolder 생성되는 함수 (ViewHolder 객체 만들어주면 됨)
~onBindViewHolder : 생성된 ViewHolder 에 data binding 해주는 함수
- getItemCount() 로 총 Item 갯수 몇개인지 판단
- onCreateViewHolder() 에서 ViewHolder 생성 (ViewHolder : 재사용을 위해 목록에서 사라지는 뷰 임시저장 )
- 뷰를 찾으면 onBindViewHolder 에서는 onCreateViewHolder() 에서 만든 ViewHolder 가져와 현재 포지션에 맞는 data 를 ViewHolder 안에 view 를 binding 해줌 // LayoutManager에게 리턴
- 맨 처음 getItemCount() 갯수로 getItemViewType(), onCreateViewHolder(), onBindViewHolder() 순차적으로 호출
==================
void notfiyDataSetChanged()
→ Data set 이 변경되는 경우 그 내용을 등록된 Observer 에게 알려줌
- Item Change : 단일 항목의 데이터가 업데이트 되었지만 위치는 변경되지 않은 경우
- Structural Change : 아이템이 Data Set 내에서 삽입, 삭제, 이동 된 경우
// 이 이벤트는 변경된 Data set 에 대해 규명하지 않기에 observer 에게 기존의 모든 아이템과 구조가 유효하지 않을 것이라고 알려줌
// LayoutManager 은 모든 자료를 다시 바인딩 하고 모든 View 를 다시 레이아웃 하게 됨
void notifyItemChanged(int position, Object payload) // position(필수): 변경된 아이템의 위치 payload(옵션): null 값인 경우 모든 업데이트로 식별
→ 아이템의 위치가 변경되면 Observer 에게 알려주는 메소드 ...
이 메소드는 구조가 변경되는 이벤트에는 반응하지 않는다.
// payload 값이 null 인 경우에는 아이템의 기존 payload 를 모두 클리어 하고 onBindViewHolder()가 호출될 때 까지 추후 payload 를 방지함
==============================================
MainActivity
→ RecyclerView
ScrapAdapter
→ onCreateViewHolder()
→ onBindViewHolder() // databinding
→ getItemCount() // Item 갯수 return
→ runScrapList() // run btn 클릭시 실행
→ inner class ScrapViewHolder // ItemView 저장
'Android' 카테고리의 다른 글
[Android] AsyncTask (0) | 2021.07.06 |
---|---|
[Android] Glide Library 글라이드 라이브러리 (0) | 2021.07.06 |
[Android] AAB; Android App Bundle (0) | 2021.06.29 |
[Android] Broadcast Receiver (0) | 2021.06.29 |
[Android] ConditionVariable (0) | 2021.06.29 |