라벨이 DiffUtil인 게시물 표시

Android RecyclerView 여러 아이템 타입 구현: sealed class와 ViewBinding

이 글은 2022년에 작성한 RecyclerView 다중 아이템 예제를 현재 Android 개발 방식에 맞춰 전면 개정한 글입니다. 기존 URL과 주제는 유지하면서 스크린샷 대신 복사해 적용할 수 있는 Kotlin 코드, ListAdapter , DiffUtil , ViewBinding을 사용합니다. 채팅 목록에는 내가 보낸 메시지와 상대방 메시지가 서로 다른 모양으로 나타납니다. 피드에는 본문뿐 아니라 날짜 구분선, 광고, 로딩 상태가 함께 들어갑니다. 이렇게 하나의 RecyclerView 에 여러 레이아웃을 표시하려면 데이터의 종류와 화면의 종류를 명확히 연결해야 합니다. 핵심은 세 가지입니다. sealed interface 로 화면에 나타날 데이터 종류를 제한한다. getItemViewType() 에서 각 데이터 종류를 정수 타입으로 변환한다. onCreateViewHolder() 와 onBindViewHolder() 에서 같은 규칙을 사용한다. 먼저 보는 핵심 데이터 타입을 기준으로 ViewHolder를 선택하고, ViewBinding으로 각 레이아웃을 안전하게 참조합니다. 목록 갱신은 notifyDataSetChanged() 대신 ListAdapter 와 DiffUtil 에 맡깁니다. 질문 답 여러 레이아웃은 어디서 구분하나? getItemViewType() 레이아웃은 언제 생성하나? onCreateViewHolder() 데이터는 언제 표시하나? onBindViewHolder() 목록 변경은 어떻게 계산하나? ListAdapter 와 DiffUtil.ItemCallback 클릭 시 position을 저장해도 되나? 저장하지 말고 현재 바인딩한 item을 전달 완성할 예제 예제 목록에는 다음 세 종류의 행이 들어갑니다. 날짜를 표시하는 헤더 내가 보낸 메시지 상대방이 보낸 메시지 데이터가 isMine: Boolean 같은 플래그 하나에 의존하도록 만들 수...