Chap10. 액티비티와 인텐트
Contents
01 액티비티와 인텐트의 기본
02 액티비티와 인텐트의 응용
2
01. 액티비티와 인텐트의 기본
안드로이드 4대 컴포넌트
액티비티(Activity)
서비스(Service) – 14장
브로드캐스트 리시버(Broadcast Receiver) – 14장
콘텐트 프로바이더(Content Provider) – 14장
3
01. 액티비티와 인텐트의 기본
액티비티
화면을 구성하는 가장 기본적인 컴포넌트(화면 하나하나)
안드로이드 4대 컴포넌트 중 가장 핵심적인 요소
MainActivity.java가 activity_main.xml이 필요할 경우 아래 호출
setContentView(R.layout.activity_main);
4
01. 액티비티와 인텐트의 기본
액티비티 추가
일반적으로 Activity 하나당 XML 파일 하나 생성
MainActivity.java 코드
Activity 클래스를 상속받음 → MainActivity.java를 Activity라고 부름
5
새로운 액티비티 추가하기(실습 10-1)
1. 안드로이드 프로젝트 생성
[01] 프로젝트 이름(Project10_1)
패키지 이름(com.cookandroid.project10_1)
[실습 2-4]의 1~4(p.87~89)
6
새로운 액티비티 추가하기(실습 10-1)
2. 화면 및 디자인 편집(activity_main.xml)
[02] [activity_main.xml] 코딩(p.393 예제 10-1)
7
새로운 액티비티 추가하기(실습 10-1)
2. 화면 및 디자인 편집(second.xml)
[03] 새로운 액티비티([second.xml]) 파일 생성
[App] → [res] → [layout : 오른쪽 버튼 클릭]
[New] → [Layout resource file]
[New Resource File] → [File name] → “second.xml” → <OK>
8
새로운 액티비티 추가하기(실습 10-1)
2. 화면 및 디자인 편집(second.xml)
[04] [second.xml] 코딩(p.393 예제 10-2)
9
새로운 액티비티 추가하기(실습 10-1)
3. Java 코드 작성 및 수정(SecondActivity.java)
[05] [SecondActivity.java] 파일 생성
[App] → [java] → [com.cookandroid.ex10 : 오른쪽 버튼 클릭]
[New] → [Java Class]
[Create New Class] → [Name] → “SecondActivity” → <OK>
10
새로운 액티비티 추가하기(실습 10-1)
3. Java 코드 작성 및 수정(SecondActivity.java)
[06] [SecondActivity.java] 수정(p.394 예제 10-3)
11
새로운 액티비티 추가하기(실습 10-1)
3. Java 코드 작성 및 수정(SecondActivity.java)
[07] [SecondActivity.java] (p.395 예제 10-4)
<돌아가기> 버튼 클릭 이벤트 코딩
SecondActivity 종료 → MainActivity 호출
12
현재 액티비티 종료
새로운 액티비티 추가하기(실습 10-1)
3. Java 코드 작성 및 수정(MainActivity.java)
[08] [MainActivity]→[SecondActivity] 호출(p.395 예제 10-5)
13
새로운 액티비티 추가하기(실습 10-1)
4. 프로젝트 실행 및 결과 확인
[09] 완성된 프로젝트를 실행(오류 발생)
그냥 종료되거나 그림과 같은 오류 발생
안드로이드에서 사용될 액티비티 AndroidManifest.xml에 꼭 등록
메인 액티비티(MainActivity) 자동 등록
추가한 세컨드 액티비티 별도 등록
14
새로운 액티비티 추가하기(실습 10-1)
2. [반복] 화면 및 디자인 편집
[10] [AndroidManifest.xml] 수정(p.396 예제 10-6)
[SecondActivity] 등록
15
새로운 액티비티 추가하기(실습 10-1)
4. 프로젝트 실행 및 결과 확인
[11] 저장 및 실행
저장 - 메뉴 → [File] → [Save All] 클릭
실행 - 메뉴 → [Run] → [Run ‘app’] 클릭
5. 안드로이드 애플리케이션 개발 완료
[12] 결과 확인 및 초기화면으로 돌아감
16
직접 풀어보기 10-1(p.397)
[실습 10-1]을 다음과 같이 수정하여라.
17
실습문제
그림과 같이 작동하도록 작성하시오.
18
01. 액티비티와 인텐트의 기본
인텐트(Intent)
4대 컴포넌트가 서로 데이터를 주고 받기 위한 메시지 객체
Activity, Service, Broadcast Receiver, Content Provider
명시적 인텐트와 암시적 인텐트
19
01. 액티비티와 인텐트의 기본
명시적 인텐트와 데이터의 전달
다른 액티비티 이름을 명확히 지정할 때 사용하는 방법
사용자가 새로운 액티비티를 직접 생성하고 호출할 때 사용
SecondActivity.class로 정확히 지정
startActivity(intent)로 생성한 인텐트를 넘겨 SecondActivity 실행
20
01. 액티비티와 인텐트의 기본
명시적 인텐트와 데이터의 전달
MainActivity(인텐트에 데이터를 실어서 넘김)
SecondActivity(받은 데이터 처리)
21
getStringExtra()
getIntExtra()
getBooleanExtra()
01. 액티비티와 인텐트의 기본
레이팅바
22
01. 액티비티와 인텐트의 기본
레이팅바 xml 코드(p.398 예제 10-7)
23
01. 액티비티와 인텐트의 기본
레이팅바 Java 코드(p.399 예제 10-8)
24
명화 선호도 투표 앱 만들기(실습 10-2)
1. 안드로이드 프로젝트 생성
[01] 프로젝트 이름(Project10_2)
패키지 이름(com.cookandroid.project10_2)
[실습 2-4]의 1~4(p.87~89)
25
명화 선호도 투표 앱 만들기(실습 10-2)
2. 화면 및 디자인 편집(activity_main.xml)
[03] 화면 구성(적당한 명화 이미지 9개(/res/drawable) 복사)
바깥 리니어레이아웃
LinearLayout(3개) , Button(btnResult) , layout_weight(3:3:3:1)
안쪽 리니어레이아웃(3) – 이미지뷰 삽입(iv1~iv9)
layout_weigh(1:1:1), layout_margin(ex : 5dp)
26
명화 선호도 투표 앱 만들기(실습 10-2)
2. 화면 및 디자인 편집(activity_main.xml)
[03] 코드 작성(p.401 예제 10-9)
27
명화 선호도 투표 앱 만들기(실습 10-2)
2. 화면 및 디자인 편집(result.xml)
[04] [result.xml] 파일 생성
/res/layout 폴더에 result.xml 생성
바깥은 TableLayout으로 설정 - stretchColumns 속성(0)
<TableRow>를 그림의 숫자와 동일한 (9+1)개
각 TableRow 에 TextView(tv1~tv9), RatingBar(rbar1~rbar9)
마지막 TableRow 에 <돌아가기> - Button(btnReturn)
28
명화 선호도 투표 앱 만들기(실습 10-2)
2. 화면 및 디자인 편집(result.xml)
[04] – [result.xml] 파일 코딩(p.402 예제 10-10)
29
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(ResultActivity.java)
[05] [ResultActivity.java] 파일 생성 및 코딩
액티비티의 필수 메소드 onCreate( ) 추가 후 코드 작성
메뉴 → [Code] → [Override Methods] → [android.app.Activity]
30
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(ResultActivity.java)
[05] [ResultActivity.java] 파일 생성 및 코딩
AndroidManifest.xml에 등록
31
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(MainActivity.java)
[06] [MainActivity.java] 코딩(p.403 예제 10-11)
그림 클릭할 때마다 투표수를 저장할 9개 배열 선언(0으로 초기화)
이미지뷰 위젯 저장할 9개 배열 선언
이미지뷰 위젯 id R.id.iv1 ~ R.id.iv9 저장할 배열 선언
그림 이름 저장할 9개 배열 선언
32
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(MainActivity.java)
[06] [MainActivity.java] 코딩(p.403 예제 10-11)
33
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(MainActivity.java)
[07] 이미지 클릭 이벤트 리스너 코딩(p.404 예제 10-12)
반복문 사용 – ImageView(9)
이미지 클릭 - 이미지 투표수 증가이미지를 클릭할 때마다
해당 이미지 이름과 누적된 투표수도 토스트 메시지로 보여줌
34
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(MainActivity.java)
[07] 이미지 클릭 이벤트 리스너 코딩(p.404 예제 10-12)
35
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(MainActivity.java)
[08] <투표 종료> 클릭 이벤트 리스너 코딩(p.404 예제 10-13)
인텐트 생성, 인텐트에 투표수 배열과 그림 이름 배열을 넣은 후 결과
액티비티 호출
36
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(ResultActivity.java)
[09] [ResultActivity.java] 코딩(p.405 예제 10-14)
메인 액티비티에서 보낸 인텐트 받고
넘겨받은 투표 결과 배열과 그림 이름 배열 저장
37
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(ResultActivity.java)
[10] [ResultActivity.java] 나머지 코딩(p.406 예제 10-15)
result.xml의 TextView(9), RatingBar(9) 위젯 변수 배열 선언
TextView id, RatingBar id 저장한 배열 변수 선언
XML 파일의 TextView와 RatingBar 위젯 변수에 대입
TextView 위젯 변수에 넘겨받은 그림 이름 적용
RatingBar에 넘겨받은 투표 결과 적용
Button 클릭(서브 액티비티 종료 → 메인 액티비티로 돌아감)
38
명화 선호도 투표 앱 만들기(실습 10-2)
3. Java 코드 작성 및 수정(ResultActivity.java)
[10] [ResultActivity.java] 나머지 코딩(p.406 예제 10-15)
39
명화 선호도 투표 앱 만들기(실습 10-2)
4. 프로젝트 실행 및 결과 확인
[11] 저장 및 실행
저장 - 메뉴 → [File] → [Save All] 클릭
실행 - 메뉴 → [Run] → [Run ‘app’] 클릭
5. 안드로이드 애플리케이션 개발 완료
[12] 결과 확인 및 초기화면으로 돌아감
40
직접 풀어보기 10-2(p.407)
[실습 10-2]의 투표 결과 화면에서 가장 많은 표를 받은
그림과 그 이름을 화면에 보여준다.
41
직접 풀어보기 10-2(p.407)
[실습 10-2] 추가 부분(result.xml)
42
직접 풀어보기 10-2(p.407)
[실습 10-2] 추가 부분(ResultActivity.Java)
43
02. 액티비티와 인텐트의 응용
양방향 액티비티와 데이터의 전달
MainActivity(SecondActivity 데이터 넘김)
SecondActivity(MainActivity 데이터를 돌려줌)
44
02. 액티비티와 인텐트의 응용
양방향 데이터 전달 예제(예제 10-16~19 실행 결과)
45
02. 액티비티와 인텐트의 응용
양방향 데이터 전달 xml 코드(p.409~410 예제 10-16,17)
46
02. 액티비티와 인텐트의 응용
양방향 데이터 전달 Java 코드(p.410 예제 10-18)
47
02. 액티비티와 인텐트의 응용
양방향 데이터 전달 Java 코드(p.411 예제 10-19)
48
02. 액티비티와 인텐트의 응용
양방향 데이터 전달 [AndroidManifest.xml]에 추가
49
직접 풀어보기 10-3(p.412)
직접 풀어보기 10-3(p.412)
50
02. 액티비티와 인텐트의 응용
암시적 인텐트(Implicit Intent, 묵시적 인텐트)
안드로이드에서 제공하는 기존 응용프로그램 실행
전화번호 인텐트로 넘김 → 전화 걸기 응용프로그램 실행
51
02. 액티비티와 인텐트의 응용
암시적 인텐트(Implicit Intent, 묵시적 인텐트)
911에 응급 전화를 거는 형식
전화 걸기를 하려면
AndroidManifest.xml의 <application 위에 다음과 같이 권한 추가
52
02. 액티비티와 인텐트의 응용
암시적 인텐트 xml 코드(p.413 예제 10-20)
53
02. 액티비티와 인텐트의 응용
암시적 인텐트 Java 코드(p.413~415 예제 10-21)
54
02. 액티비티와 인텐트의 응용
암시적 인텐트 Java 코드(p.413~415 예제 10-21)
55
02. 액티비티와 인텐트의 응용
암시적 인텐트 Java 코드(p.413~415 예제 10-21)
56
과제10-2 연습문제6(p.425)
<실습 10-2>를 개선해서 결과화면이 뷰플리퍼로 1등부
터 1초마다 자동으로 나오도록 프로젝트를 작성하라.
힌트 : 6장 뷰플리퍼(p.257~259 참조)
57