본문 바로가기
Android

[깡샘의 안드로이드 프로그래밍] 정리 12 - Custom Adapter

by 들풀민들레 2018. 1. 5.
본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

 

 

10장. AdapterView 활용

 

10.2.1. 커스텀 Adapter가 필요한 예

 

AdapterView들은 Adapter 없이는 화면을 완성할 수 없습니다. 꼭 Adapter를 적용해 주어야 니다. 

하지만 ArrayAdapter, SimpleAdapter 등 라이브러리의 Adapter들은 화면에 문자열을 순서대로 나열하는 정도의 간단한 ListView 구성을 도와주는 Adapter입니다. 

만일 문자열 나열 이상의 ListView를 만들어야 한다면 개발자가 직접 커스텀 Adapter를 만들어서 적용해야 합니다.

커스텀(custom) Adapter란, 개발자가 직접 만든 Adapter를 의미합니다.

커스텀 Adapter로 개발해야 하는 상황을 예로 들어 보겠습니다. 그림 10-11은 구글 드라이브 앱의 목록 화면입니다. 

화면이 ListView로 구성되어 있는데요. 각 항목에는 파일 타입을 표현하는 이미지와 파일제목, 수정날짜가 표시되고 오른쪽에 각 파일을 위한 메뉴 이미지가 나옵니다. 

각 항목을 구성하는 레이아웃 XML 파일을 만들어 적용하면 됩니다.

 

 

위의 ListView 화면을 완성하고자 한다면 어떤 Adapter를 이용하여 완성할 수 있을까요? 

단순하게 생각하면 파일제목과 수정날짜의 문자열이 위아래로 나열된 구조로 보아서 SimpleAdapter로 완성할 수 있는 화면처럼 보이지만, 사실은 불가능합니다. 

왜냐하면 왼쪽의 파일 타입 이미지가 데이터이기 때문입니다. 각 항목에 같은 이미지가 사용되지 않고, 문서, 이미지, 일반 파일인지에 따라 이미지가 다르게 출력되므로 데이터로 볼 수 있습니다. 

파일 타입에 따라 다른 이미지가 출력되게 하는 건 개발자 알고리즘입니다. 그리고 타입에 맞는 이미지를 출력하는 코드가 들어갈 위치는 Adapter입니다. 결국, 데이터를 나열하는 코드가 Adapter에 들어가야 하므로 직접 Adapter를 만들어야 완성할 수 있습니다.

 

또한, 사용자 이벤트 부분도 문제입니다. ListView에서 제공하는 이벤트는 사용자가 항목을 선택할 때 발생합니다. 이 이벤트는 잘 지원되지만, 때로는 하나의 항목에 나열된 뷰별 이벤트를 다르게 처리하고 싶을 때도 있습니다. 

예를 들어, 그림 10-11을 보면 항목 오른쪽에 메뉴 이미지가 출력되는데, 이 부분을 사용자가 클릭했을 때만 특정 이벤트로 처리하고 싶다면요? 어떤 뷰에 어떤 이벤트를 추가할것인지 개발자 코드로 해결해야 하고, 그런 코드는 Adapter 내에 들어가야 합니다. 

결국 개발자가 Adapter를 직접 만들어야 하는 상황이지요.

 

이처럼 Adapter를 직접 만들어 개발해야 하는 상황은 크게 3가지로 정리할 수 있습니다.

 

  • 개발자 알고리즘대로 항목의 데이터가 설정되어야 할 때
  • 개발자 알고리즘대로 항목별 뷰의 이벤트를 다르게 처리해야 할 때
  • 개발자 알고리즘대로 항목별 레이아웃을 다르게 적용해야 할 때

 

실제 개발 현장에서는 ListView가 대부분 복잡할 것이므로 커스텀 Adapter를 직접 만드는 건 아마도

선택이 아니라 필수일 것입니다.