글

라벨이 ViewBinding인 게시물 표시

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 같은 플래그 하나에 의존하도록 만들 수...

Android RecyclerView Kotlin 예제: ViewBinding과 ListAdapter로 목록 만들기

이미지
이 글은 2022년에 작성한 RecyclerView 예제를 2026년 기준으로 전면 개정한 글입니다. 기존 URL과 검색 의도는 유지하면서 깨진 이미지와 실행되지 않는 코드를 제거하고, ViewBinding·ListAdapter·DiffUtil을 연결한 완성형 Kotlin 예제로 다시 작성했습니다. Android RecyclerView Kotlin 예제: ViewBinding과 ListAdapter로 목록 만들기 RecyclerView 는 많은 데이터를 목록이나 그리드로 표시할 때 화면 밖의 아이템 뷰를 재사용하는 Android View 컴포넌트입니다. 모든 행을 한꺼번에 만들지 않기 때문에 메모리 사용과 뷰 생성 비용을 줄일 수 있습니다. 이 글에서는 단순히 목록이 보이는 데서 끝나지 않고 다음 요소를 하나의 예제로 연결합니다. 구성 요소 역할 RecyclerView 목록을 화면에 표시하고 아이템 뷰를 재사용 LinearLayoutManager 아이템을 세로 방향으로 배치 ViewHolder 한 행의 ViewBinding을 보관 ListAdapter 현재 목록을 관리하고 변경 목록을 제출받음 DiffUtil.ItemCallback 이전 목록과 새 목록의 차이를 계산 ViewBinding findViewById() 없이 XML 뷰에 안전하게 접근 Android 공식 문서는 새 UI에 Jetpack Compose 사용을 권장하며 RecyclerView 라이브러리는 유지보수 모드입니다. 다만 기존 XML 기반 앱을 유지하거나 View 시스템이 필요한 화면에서는 RecyclerView가 여전히 중요한 선택입니다. 완성할 예제 예제 화면에는 사용자 프로필 목록이 표시됩니다. 아이템을 누르면 즐겨찾기 상태가 바뀌고, 전체 목록이 아니라 변경된 행만 갱신됩니다. text RecyclerViewSample/ ├─ MainActivity.kt ├─ Profile.kt ├─ ProfileAda...