어댑터뷰 리스트 뷰, 그리드 뷰, 스피너, 갤러리 등을 묶어 어댑터 뷰라 부름

Slides:



Advertisements
Similar presentations
Android Application. 최신버전 안드로이드 SDK 설치 1. SDK 설치 접속.
Advertisements

Application Create Android Side. Application 설계 시 꼭 지켜야 할 5 가지 UI 쓰레드는 UI 만 처리하게 하자 사용자를 방해하지 말라. 다양한 화면 해상도를 지원하라 –Absolutelayout 을 사용하지 말아라 ( 고정값 )
For Android 이재원.  페이스북 SDK 설치  2 가지 예제 & 소스  API 사용 예제 프로젝트 만들기  Graph API  참고사항 & 사이트.
삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
Android Android-UI (DMI) Kang GiHoon. DMI--Kang Gihoon Android UI.
출석수업 자료 교과서 범위: 제1장-4장.
패널자료 분석
라오디게아 교회의 교훈 본문 계 3: ○라오디게아 교회의 사자에게 편지하라 아멘이시요 충성되고 참된 증인이시요 하나님의 창조의 근본이신 이가 이르시되 15. 내가 네 행위를 아노니 네가 차지도 아니하고 뜨겁지도 아니하도다 네가 차든지 뜨겁든지 하기를 원하노라.
2015학년도 1학기 버디 프로그램 오리엔테이션 (목) 16:00.
열왕기하 1장을 읽고 묵상으로 예배를 준비합시다..
2009학년도 가톨릭대학교 입학안내.
6 메 뉴.
학교보건 운영의 실제 한천초등학교 이 채 금.
제 출 문 고용노동부 귀중 본 보고서를 ’ ~ ‘ 까지 실시한 “근로감독관 직무분석 및 교육프로그램 개발에 관한 연구”의 최종보고서로 제출합니다  연구기관 : 중앙경영연구소  프로젝트 총괄책임자 : 고병인 대표.
학습센터란? 기도에 관해 배울 수 있는 다양한 학습 코너를 통하여 어린이들이 보다 더 쉽게 기도를 알게 하고, 기도할 수 있게 하며, 기도의 사람으로 변화될 수 있도록 하는 체험학습 프로그램이다. 따라서 주입식이지 않으며 어린이들이 참여할 수 있는 역동적인 프로그램으로.
지금 나에게 주신 레마인 말씀 히브리서 13장 8절.
남북 탑승객 150명을 태운 디젤기관차가 2007년 5월 17일 오전 경의선 철길을 따라 남측 최북단 역인 도라산역 인근 통문을 통과하고 있다. /문산=사진공동취재단.
성경 암송 대회 한일교회 고등부 (일).
천주교 의정부교구 주엽동본당 사목협의회 사목활동 보고서
서비스산업의 선진화, 무엇이 필요한가? 김 주 훈 한 국 개 발 연 구 원.
Homeplus 일 家 양 득 프로그램 소개 2015년 12월.
통신이론 제 1 장 : 신호의 표현 2015 (1학기).
I. 기업과 혁신.
ESOCOM – IPIX 고정IP서비스 제안서 Proposer ㈜이소컴.
화장품 CGMP 한국콜마㈜.
초화류 종자 시장 규모 100억원 이상(추정, 생산액의 10%정도 차지)
COMPUTER ARCHITECTIRE
[ 한옥 실측 ] 1. 약실측 2. 정밀실측 조선건축사사무소.
14. 컴파일러 자동화 도구 스캐너 생성기 파서 생성기 코드 생성의 자동화
A제조용수/B환경관리/C시설관리 ㈜ 에이플러스 코리아
Introduction to Network Security
화재보험 건물구조급수 해설서 인 스 팩.
SQLite 소개 및 안드로이드에서의 사용법
CHAP 10. 액티비티와 인텐트.
액션바와 네비게이션
Android 개발환경 설정 및 Android View 소개
○ 본 강의 자료는 이지스퍼블리싱(주)에서 제공하는 강의 교안입니다.
CHAP 7. 메뉴와 대화상자.
Contents 학습목표 Canvas와 Paint 객체를 통해 화면에 원하는 도형을 그리고 속성을 변경하는 기본적인 방법에 대해 소개한다. 토스트로 메시지를 출력하는 방법과 스피커를 통해 소리를 출력하는 방법에 대해서도 알아본다. 학습내용 캔버스 그리기 객체 쉐이더 그외.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
7장 배열 ②.
자기소개서 작성법.
Java Seminar 6.
CHAP 4. 이벤트 처리.
CHAP 6. 이벤트 처리.
모바일 서버 만들기 13장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
안드로이드 개요 2005년 휴대폰 소프트웨어 개발사인 Android를 구글이 인수 2007년 11월 오픈소스로 공개
CHAP 7. 메뉴와 대화상자.
○ 본 강의 자료는 이지스퍼블리싱(주)에서 제공하는 강의 교안입니다.
CHAP 6. 이벤트 처리.
02. 처음으로 만드는 안드로이드 애플리케이션 제목.
제주닷컴 매뉴얼 (실시간 예약시스템) 2013년 10월.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
CHAP 3. 첫번째 애플리케이션.
CHAP 13. 서비스와 방송 수신자.
SpringFramework 중간고사 요약 REST by SpringFramework.
컴퓨터공학실습(I) 3주 인공지능연구실.
Bingo 빙고 따라가기.
JA A V W. 04.
삼안 인트라넷 메뉴얼.
26강 JAVA Collections - I - 컬렉션이란? - JAVA도 결국 효과적인 데이터를 처리하기 위한 수단
Android -Data Base : 김성록 GyeongSang Univ. IT.
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Ch 4. 선택 위젯의 사용과 커스텀뷰 만들기 Assignment #1 04 – 1, 2) 08학번 정보과학과 유재윤
Presentation transcript:

어댑터뷰 리스트 뷰, 그리드 뷰, 스피너, 갤러리 등을 묶어 어댑터 뷰라 부름 - 표시할 항목 데이터를 어댑터(Adapter) 객체로부터 공급 받음 - 기능적으로 집합을 표시한다는 면에서 동일하지만, 항목을 표시하는 방법은 다름 항목들의 집합을 표시하는 위젯들 - 공동 조상인 AdapterView는 ViewGroup로부터 파생 - 어댑터 뷰들은 항목에 해당하는 여러 개의 차일드 뷰를 가질 수 있음 - 사용자와 상호 작용도 처리 AdapterView AbsListView AbsSpinner ListView GridView Spinner Gallery ExpandedListView ViewGroup View

ArrayAdapter<T> 어댑터 어댑터 뷰에 데이터를 공급하는 객체로 원본으로부터 얻은 데이터를 관리하며, 어댑터 뷰는 어댑터가 전달한 데이터를 화면에 표시 어댑터의 계층 - Adapter ㆍ어댑터 뷰와 데이터 간의 연결 제공 ㆍ항목들의 집합을 관리하는 기본적인 메서드 선언 - ListAdapter ㆍ리스트 뷰와 연결에 필요한 메서드 정의 - SpinnerAdapter ㆍ스피너와 연결에 필요한 메서드 정의 - BaseAdapter 추상 클래스 ㆍ두 인터페이스의 메서드 중 기본적인 것들 구현 - BaseAdapter 파생 클래스 ㆍ항목들의 원본이 어디인가에 따라 나뉨 ㆍArrayAdapter ㆍCursorAdapter ㆍSimpleAdapter Adapter ListAdapter SpinnerAdapter BaseAdapter ArrayAdapter<T> CursorAdapter SimpleAdapter

ArrayAdapter 두 번째 인수는 항목을 표시할 레이아웃의 리소스 ID ArrayAdapter(Context context, int textViewResourceId, List<T> objects) ArrayAdapter(Context context, int textViewResourceId, T[] objects) 두 번째 인수는 항목을 표시할 레이아웃의 리소스 ID - 레이아웃 안에는 텍스트 뷰, 이미지 뷰, 체크 박스, 라디오 버튼 등을 배치 - 안드로이드에서 제공하는 레이아웃을 사용 가능 - 목록 표시용으로 미리 정의해 놓은 것으로 android.R. 뒤에 ID를 지정하여 사용 세 번째 인수는 데이터의 원본이며 두 가지 타입에 대해 오버로딩 - 위쪽 생성자 : List 인터페이스를 지원하는 컬렉션 객체가 원본 ArrayList가 대표적이며, LinkedList, Stack 등 - 아래쪽 생성자 : 단순 배열을 원본으로 함

ArrayAdapter ListTest (1 / 2)

ArrayAdapter ListTest (2 / 2)

ArrayAdapter 실행결과

ListView 어댑터 뷰의 대표 위젯으로 항목들을 수직으로 펼쳐서 보여주며, 스크롤을 지원 어댑터 객체 준비 후 리스트 뷰의 메서드를 호출하여 연결 - 어댑터는 리스트 뷰에 출력할 데이터 원본을 가지며, 원본을 출력할 뷰를 생성하여 리스트 뷰에 제공. - 리스트 뷰는 어댑터가 제공한 뷰를 사용자에게 보여줌. - 사용자로부터 터치 입력을 받아 항목 선택 및 스크롤 처리 배열도 일종의 리소스이며, 문자열 배열은 string-array 엘리먼트로 작성 - name 속성 : 배열 리소스의 이름 지정 - item 엘리먼트 : 배열 요소 나열 ※ 코드에서 문자열 배열을 직접 정의하는 것은 비효율적이며 관리에도 불리하다. ※ 고정적인 문자열은 리소스에 정의해 놓고 사용하는 것이 바람직하다.

ListView 리소스의 배열을 원본으로 하는 어댑터 생성 시 정적 메서드를 호출 두 번째 인수로 문자열 배열의 ID 지정, 세 번째 인수로 레이아웃을 지정 - 문자열 배열의 ID는 R.string.country이며, 레이아웃은 기본 레이아웃을 사용 - CharSequence의 배열을 원본으로 가지는 어댑터가 생성, 리턴되며 이를 리스트 뷰와 연결 - 배열이 리소스에 정의되어 있으므로 코드가 짧아짐

ListView ListTest2 (1 / 3)

ListView ListTest2 (2 / 3)

ListView ListTest2 (3 / 3)

ListView 실행결과

ListView choiceMode - 항목을 선택하는 모드 - 리스트 뷰의 항목은 디폴트로 클릭만 가능할 뿐 선택은 할 수 없지만 이 속성을 지정하면 하나 또는 복수 개의 항목을 선택할 수 있음 - 코드에서 선택 모드를 조사하거나 변경 시 get(set)ChoiceMode 메서드를 사용 - 반드시 속성에 맞는 레이아웃을 같이 적용해야 함 - 선택을 허용하려면 사용자가 누를 수 있는 체크 박스나 라디오 버튼이 레이아웃에 배치

ListView divider dividerHeight - 항목 사이의 구분선을 지정하며, 색상을 지정하거나 임의의 드로블 객체를 지정 - 코드에서는 setDivider 메서드를 사용하며 Drawable 객체를 인수로 전달 dividerHeight - 구분선의 높이를 지정

ListView – 단일 항목 추가 / 삭제 리스트 뷰에 항목을 넣거나 뺄 때는 어댑터와 연결된 원본을 편집 - 원본을 편집한 후 BaseAdapter의 메서드를 호출하여 참조하고 있는 원본 데이터가 변경되었음을 알려야 함 - 어댑터는 메서드가 호출될 때 원본을 다시 읽고 변경된 원본에 맞게 뷰를 생성하여 리스트 뷰로 재공급 리스트 뷰의 항목을 클릭하면 AdapterView.OnItemClickListener 인터페이스의 onItemClick 호출 - 항목 클릭 시점을 알고 싶다면 이 리스너를 구현한 후 리스트 뷰의 setOnItemClickListener 등록

ListView – 단일 항목 추가 / 삭제 ListTest3 (1 / 6)

ListView – 단일 항목 추가 / 삭제 ListTest3 (2 / 6)

ListView – 단일 항목 추가 / 삭제 ListTest3 (3 / 6)

ListView – 단일 항목 추가 / 삭제 ListTest3 (4 / 6)

ListView – 단일 항목 추가 / 삭제 ListTest3 (5 / 6)

ListView – 단일 항목 추가 / 삭제 ListTest3 (6 / 6)

ListView – 단일 항목 추가 / 삭제 실행결과

ListView – 복수 항목 삭제 ListTest4 (1 / 2)

ListView – 복수 항목 삭제 ListTest4 (2 / 2)

ListView – 복수 항목 삭제 실행결과

ListView – Custom Layout ListView 기본 레이아웃 simple_list_item_1 커스텀 레이아웃을 작성하면 항목을 임의의 모양으로 출력할 수 있다.

ListView – Custom Layout 어댑터로 동작하려면 BaseAdapter로부터 상속을 받아 기본 기능을 물려받은 후 요구하는 추상 메서드를 재정의 - 이 메서드들은 BaseAdapter의 조상인 Adapter 또는 ListAdapter 인터페이스에 미리 정의되어 있음 어댑터는 원본과 리스트 뷰 사이의 중계 역할을 하며, 그러기 위해서는 대화의 수단이 필요 - 약속된 인터페이스가 대화 수단이며, 메서드들은 약속된 대로 요구하는 정보를 정확히 조사하여 넘겨주어야 함 - 리스트 뷰는 필요할 때마다 이 메서드들을 호출하여 출력에 필요한 정보를 얻음 - getCount : 어댑터에 몇 개의 항목이 있는지 조사, 리턴은 원본 배열의 개수 - getItem : position 위치의 항목을 조사, 배열의 position 번째 요소를 리턴 - getItemId : position 위치의 항목 ID를 리턴 (배열은 첨자 자체가 고유한 ID이므로 첨자를 그대로 리턴)

ListView – Custom Layout getView : 항목 하나를 출력하기 위한 뷰를 생성하여 리턴하는, 항목 뷰를 생성하는 가장 핵심적인 메서드 - 리스트 뷰 : 각 항목 출력 시 어댑터의 getView 메서드를 호출하여 뷰를 요청, 리턴된 뷰를 리스트 뷰의 해당 위치에 배치. - 커스텀 뷰 : 이 메서드를 재정의하여 커스텀 레이아웃을 생성, 원본의 데이터를 대응되는 위젯에 출력 후 리턴. - position : 생성할 항목의 순서값 - parent : 생성되는 뷰의 부모 (즉, 리스트 뷰를 의미한다.) - convertView : 이전에 생성된 차일드 뷰로 최초 호출시에는 null이 전달, 두 번째 호출 시부터는 convertView에 이미 생성되어 있는 항목 뷰가 전달. 뷰를 준비한 후 position 인수 위치의 정보를 읽어 뷰의 위젯에 출력 객체의 형태에 맞게 만든 레이아웃이므로 어느 정보를 어느 위젯에 출력할 것인가는 통상 getView 메서드에서 하드 코딩 Icon Name 원본 항목 레이아웃

ListView – Custom Layout ListTest5 (1 / 8)

ListView – Custom Layout ListTest5 (2 / 8)

ListView – Custom Layout ListTest5 (3 / 8)

ListView – Custom Layout ListTest5 (4 / 8)

ListView – Custom Layout ListTest5 (5 / 8)

ListView – Custom Layout ListTest5 (6 / 8)

ListView – Custom Layout ListTest5 (7 / 8)

ListView – Custom Layout ListTest5 (8 / 8)

ListView – Custom Layout 초기화까지 완료된 convertView를 리턴 후 리스트 뷰는 항목을 해당 위치에 출력. - 두 번째 이후부터는 생성된 convertView가 인수로 전달되므로 속성만 전달 - 이 과정은 원본의 모든 데이터가 출력될 때까지 반복 항목 클래스와 어댑터 준비 후 메인에서 이들을 조합하여 리스트 뷰에 출력. - 리스트 뷰에 출력할 항목 배열을 초기화 - 커스텀 어댑터 객체를 생성 - 리스트 뷰의 setAdapter 메서드를 호출하여 리스트 뷰와 어댑터를 연결 리스트 뷰와 어댑터 통신 내부 동작. - 리스트 뷰는 어댑터의 getCount를 호출하여 원본 항목 개수를 조사, 각 항목에 대해 getView를 호출하여 뷰를 요청 - 어댑터는 미리 전달받은 리소스 ID로부터 레이아웃을 생성, 원본의 데이터를 대응되는 위젯에 미리 대입하여 리턴. 항목 클래스와 어댑터 준비 후 메인에서 이들을 조합하여 리스트 뷰에 출력

ListActivity 리스트 뷰는 다른 뷰를 포함할 수 있는 뷰 그룹이라 보통 액티비티 전체를 채움 리스트 뷰를 사용하는 액티비티는 레이아웃 구조가 거의 비슷하며 어댑터와 연결하고 선택 리스너를 처리하는 코드도 대동소이함 따라서 시스템 차원에서 리스트 뷰만으로 액티비티를 구성하는 ListActivity 클래스를 제공 - ListView를 내부 멤버로 가지며 액티비티 전체를 리스트 뷰가 가득 채움 - 별도의 레이아웃 작성이 필요 없으며 아래의 멤버로 내부의 리스트 뷰에 바로 접근 가능 - getListView : 리스트 액티비티의 멤버인 ListView 객체를 조사. - setListAdapter : 리스트 뷰와 어댑터를 연결. 리스트 뷰의 항목이 선택되면 onListItemClick 메서드가 호출되므로 별도의 리스너 등록이 필요없이 이 메서드를 재정의 리스트 뷰를 위한 객체와 리스너를 래핑한 클래스

OverScroll 안드로이드 2.3 버전부터 공식 지원 View 클래스에 오버 스크롤 방식을 지정하는 overScrollMode 속성이 추가됨 항목의 개수나 스크롤 모드에 따라 범위 끝에서의 동작이 달라짐 디폴트는 ifContentScrolls이며 항목 개수에 따라 오버 스크롤 여부를 결정 뷰의 속성이므로 XML 문서에 기록 가능하며 아래의 메서드로 실행 중 값 변경 또는 조사 가능

OverScroll ListView.setOverScrollMode(ListView.OVER_SCROLL_ALWAYS); ListView.setOverScrollMode(ListView.OVER_SCROLL_NEVER); ListView.setOverScrollMode(ListView.OVER_SCROLL_IF_CONTENT_SCROLLS);

Spinner 목록을 표시하며 AdapterView의 후손으로, 리스트 뷰와 용도가 동일 항상 펼쳐진 상태인 리스트 뷰에 비해 스피너는 클릭할 때만 팝업으로 펼쳐짐 여러 가지 선택 사항 중 하나를 선택 받을 때만 사용 어댑터를 통해 데이터를 공급받으며, 어댑터 생성 방법은 리스트 뷰와 동일 항목 뷰를 표시하는 기본 레이아웃의 종류 - simple_spinner_item : 문자열만 표시 - simple_spinner_dropdown_item - 문자열과 라디오 버튼 표시 어댑터의 세 번째 인수로 레이아웃을 지정 스피너 자체에 라디오 버튼을 배치하는 것은 어울리지 않으므로 통상 simple_spinner_item을 지정

[ simple_spinner_item ] [ simple_spinner_dropdown_item ] 스피너 자체에 적용할 레이아웃과는 별도로 클릭 시 나타나는 팝업의 레이아웃을 아래의 메서드로 지정 인수로 스피너의 기본 레이아웃 두 가지 중 하나를 지정 [ simple_spinner_item ] [ simple_spinner_dropdown_item ]

Spinner 선택 사항에 대한 프롬프트 메시지를 팝업 상단에 따로 표시 가능 프롬프트는 아래의 메서드로 지정 가능하며, 리소스의 문자열 ID를 지정하거나 문자열 리터럴을 직접 지정 가능 XML에 prompt 속성으로 지정 가능하나 이때는 리소스만 지정할 수 있음 스피너에서 선택 변경 시 AdapterView.OnItemSelectedListener 인터페이스의 메서드가 호출 항목이 선택될 때, 모든 항목이 선택 해제될 때 각각 호출

Spinner 최초 실행시에 스피너의 첫 번째 항목이 선택되며 이때도 onItemSelected 메서드가 호출 - 메인 레이아웃에 텍스트 뷰와 스피너 하나 배치. - arrays.xml에 과일들이 문자열 리소스로 정의, 이 배열을 원본으로 사용

Spinner Spinner 예제 - 스피너 자체에 simple_spinner_item 레이아웃 지정. 드롭다운 팝업에 simple_spinner_dropdown_item 레이아웃 지정. - 이 두 조합이 가장 일반적 리스너에서 선택이 바뀔 때 사용자가 선택한 과일 이름을 토스트로 출력 MainActivity.java public class MainActivity extends Activity { ArrayAdapter<CharSequence> adspin; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner spin = (Spinner)findViewById(R.id.myspinner); spin.setPrompt("과일을 고르세요."); adspin = ArrayAdapter.createFromResource(this, R.array.fruits, android.R.layout.simple_spinner_item); adspin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin.setAdapter(adspin); spin.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View viiew, int position, long id) { Toast.makeText(MainActivity.this, adspin.getItem(position) + "는 맛있다.", Toast.LENGTH_SHORT).show(); } public void onNothingSelected(AdapterView<?> parent) {} });

Spinner 실행결과