Android ListView: Interactive 구현 및 재사용 가능한 커스텀 ListView 설계

Source

  • Evernote/Technote scraps/Being Myself 안드로이드 013 ListView 꾸미기 & 최적화 하기 22.md

Summary

이 문서는 Android ListView에서 사용자 상호작용(Interactive)을 처리하는 방법과 재사용 가능한 커스텀 ListView를 설계하는 패턴을 다룹니다. 먼저, ListView의 row에 RatingBar와 같은 상태 유지 위젯을 사용할 때, convertView 재활용(View Recycling)으로 인해 상태가 초기화되는 문제를 해결하기 위해 커스텀 데이터 모델(RowModel)을 사용하여 상태를 저장하고 getView()에서 복원하는 방법을 설명합니다. 두 번째로, 코드의 재사용성을 높이기 위해 Adapter, ListView, ViewWrapper 클래스를 분리한 설계 패턴을 소개합니다. 이 패턴에서는 커스텀 Adapter가 위젯 상태 저장 및 getView() 로직을 담당하고, 커스텀 ListView 컴포넌트가 이를 감싸서 외부에서 단순한 ArrayAdapter만 전달받아 사용할 수 있도록 합니다. 이를 통해 새로운 형태의 Interactive ListView를 쉽게 확장할 수 있습니다.

Key Points

  • Interactive ListView 구현 시 convertView 재활용에 따른 상태 손실 문제 발생
  • 상태 유지 솔루션: 커스텀 데이터 모델(RowModel)을 사용하여 위젯 상태(RatingBar 값 등)를 저장 및 복원
  • getView() 내에서 이벤트 리스너를 설정하여 상태 변경 시 모델 업데이트
  • 재사용 가능한 설계 패턴: Adapter, ListView, ViewWrapper 클래스 분리
  • 커스텀 Adapter(RatingBarListAdapter): 위젯 상태 저장소 역할 및 getView() 로직 구현
  • 커스텀 ListView 컴포넌트(RatingBarListView): setAdapter() 오버라이딩을 통해 내부 Adapter와 연결
  • 외부(Activity)에서는 단순 ArrayAdapter만 전달하여 복잡한 로직을 캡슐화