개발일지

[Android] recyclerview 본문

Android

[Android] recyclerview

강강강 2021. 6. 29. 19:28
  • RecyclerView 
    → 단지 recyclerview 항목 재활용하고 보여주는 역할 
    → adapter 와 소통 (adapter 에게 ViewHolder 받음)


  • Adapter (실제 data 가지고 있음) 
    → 필요한 ViewHolder 객체 생성하고 데이터를 ViewHolder 객체와 결합 


  • ViewHolder (화면에 표시되는 아이템 뷰 저장 )
    → 하나의 view 만들고 보관하는 일  // 재사용을 위해 목록에서 사라지는 뷰 임시저장 

    ~onCreateViewHolder : ViewHolder 생성되는 함수 (ViewHolder 객체 만들어주면 됨)
    ~onBindViewHolder : 생성된 ViewHolder 에 data binding 해주는 함수 

 

  1. getItemCount() 로 총 Item 갯수 몇개인지 판단 
  2. onCreateViewHolder() 에서 ViewHolder 생성 (ViewHolder  : 재사용을 위해 목록에서 사라지는 뷰 임시저장 )
  3. 뷰를 찾으면 onBindViewHolder 에서는 onCreateViewHolder() 에서 만든 ViewHolder 가져와 현재 포지션에 맞는 data 를 ViewHolder 안에 view 를 binding 해줌   // LayoutManager에게 리턴 
  4. 맨 처음 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