본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
29장. 앱 위젯 개발
29.2.1. Collection 앱 위젯 구조
앱 위젯을 개발할 때 화면에 ListView, GridView 등 데이터 여러 건이 추가되는 뷰를 이용할 때는 앞에서 설명한 앱 위젯 개발 방법에 구성요소가 더 추가되어야 합니다.
앱 위젯이 ListView이면 레이아웃 XML과 Widget Provider XML, 브로드캐스트 리시버로 구성하여 앱 위젯을 만들어 적용하고, 앱 위젯 업데이트 의뢰는 RemoteViews로 처리하는 구조는 앞에서 살펴본 일반 앱 위젯 개발과 같습니다.
그런데 ListView는 Adapter가 있어야 화면에 데이터를 출력할 수 있는 뷰입니다. 따라서 앱 위젯의 ListView를 위한 Adapter를 어떻게 전달할 것인지의 문제가 있습니다. Adapter는 우리가 만들지만 Adapter를 활용해 ListView를 완성하는 곳은 런처 앱입니다. 또한, 앱 위젯의 뷰 클릭 이벤트는 앞에서 살펴본 대로 의뢰하면 되지만, ListView는 항목 선택 이벤트가 되며 각 항목 선택 시 항목을 식별하기 위한 데이터가 이벤트에 포함되어 발생해야 합니다. 이를 어떻게 표현할 것인지의 문제도 있습니다.
Collection 타입의 앱 위젯에서 화면을 구성하기 위한 Adapter를 위해 RemoteViewsFactory라는 클래스를 제공합니다. Collection 타입의 앱 위젯을 위한 구조도로 설명해 보겠습니다.
①번 흐름에서 앱 위젯을 위한 레이아웃 XML, Widget Provider XML, AndroidManifest.xml, 브로드캐스트 리시버는 모든 앱 위젯의 공통 구성요소입니다. 그런데 Collection 타입의 앱 위젯은 RemoteViewsService와 RemoteViewsFactory를 더 준비해야 합니다. RemoteViewsFactory는
앱 위젯의 뷰를 구성하기 위한 Adapter 역활을 하는 클래스이며, RemoteViewsService는 RemoteViewsFactory를 얻기 위해 실행되는 서비스입니다.
②번 흐름에서 브로드캐스트 리시버가 실행되면 RemoteViews로 의뢰내용을 담아 런처 앱에 전달하게 되는데, 이때 의뢰내용에 포함될 내용이 RemoteViewsFactory를 얻기 위해 RemoteViewsService 를 실행하기 위한 인텐트 정보가 포함되어야 합니다. 그리고 사용자가 ListView에서 항목을 선택했을 때 발생시켜야 하는 인텐트 정보가 포함되어야 합니다.
③번 흐름에서 런처 앱은 ②번에서 반환한 RemoteViews에 포함된 RemoteViewsService를 실행하기 위한 인텐트를 발생시킵니다. RemoteViewsService가 실행되어 준비된 RemoteViewsFactory를 생성하여 반환하면 되며 RemoteViewsFactory에는 각 항목을 어떻게 구성할지에 대한 내용과 항목 선택 이벤트 시 각 항목에 추가되어야 하는 데이터를 명시하게 됩니다.
'Android' 카테고리의 다른 글
FusedLocationProviderClient (0) | 2018.01.30 |
---|---|
[깡샘의 안드로이드 프로그래밍] 정리 32- MediaPlayer (0) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 30 - Camera2 API (2) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 29 - 블루투스 (2) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 28 - FCM (1) | 2018.01.06 |