31
Anna Schaller Android 기기 기기기 기기기 기기기 기 기기기 Motorola Mobility Fragment 소소

Introducing Fragments

Embed Size (px)

Citation preview

Page 1: Introducing Fragments

Anna SchallerAndroid 기술 전도사

개발자 플랫폼 및 서비스

Motorola Mobility

Fragment 소개

Page 2: Introducing Fragments

2페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment

• 애플리케이션을 하위 구성 요소로 나누어 개별적으로 관리하고 다양한 방법으로 결합할 수 있도록 해줍니다 ( 예 : 다중 창 UI 만들기 ).

Page 3: Introducing Fragments

3페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

왜 Fragment 인가 ?

• 개발자의 관점에서 볼 때 스마트폰과 태블릿 간 가장 큰 차이점은 화면 크기입니다 .

• Fragment 는 스마트폰과 태블릿 모두에 맞게 최적화하고 싶은 앱을 위한 가교를 만들어 줍니다

Fragment 가 두 개인 Activity A

또는

Page 4: Introducing Fragments

4페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

준비 (Getting there)

• 준비하기 위한 두 가지 방법– Android 3.0 SDK

– Android Compatibility( 호환 ) 패키지

• 다수의 레이아웃– 어디에서나 이중 + 창 지원

– 어디에서나 단일 창 지원

• Activity 가 여전히 필요함

• 두 개 정도의 Fragment 만들기

• 표시되는 각 Fragment 의 경우 UI 를 추가

• Fragment 를 Activity 에 추가

Page 5: Introducing Fragments

5페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

• 화면 크기

– 소 , 중 , 대 , 초대형

• 각 화면 크기에는 2 가지 방향이 있습니다

– 가로

– 세로

• 여러 구성에 대한 계획 수립

– /res/layout-small-land 및 /res/layout-small-port

– /res/layout-normal-land 및 /res/layout-normal-port

– /res/layout-large-land 및 /res/layout-large-port

– /res/layout-xlarge-land 및 /res/layout-xlarge-land

레이아웃에 대한 계획 수립

Page 6: Introducing Fragments

6페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

이중 창 ( 가로 및 세로 )

Page 7: Introducing Fragments

7페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment – 이중 창

Fragment 목록

Fragment

Activity

findFragmentById(R.id.DetailFragment)

setContentView(R.layout.main)

Page 8: Introducing Fragments

8페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Android 3.0 에서 Fragment 작업하기1. 각 Fragment 를 위한 새 클래스를 만듭니다

– android.app.Fragment; 를 가져옵니다

– Fragment 또는 ListFragment 를 확장합니다 (Activity 대신 )

– 수명 (Lifecycle) 호출을 추가합니다

2. 각 Fragment 에 대한 새 resource.xml 파일을 생성합니다<ViewGroup> <UI elements> </ViewGroup>

3. 각 Fragment 를 위한 새 Fragment 태그로 main.xml 을 업데이트합니다

<fragment class=“my.new.fragment.class” android:id=“@+id/fragmentIdX>

4. MainApp.java 에서 (Activity 확장 )

– setContentView(R.layout.main) 로 애플리케이션 레이아웃을 로드합니다

5. Fragment1 목록 항목이 findFragmentById(R.id.fragmentIdX) 로 Fragment2 에 연결됩니다 .

Page 9: Introducing Fragments

9페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

프로젝트 해부 – 이중 창만 해당(Android 3.0)

myFragmentProject|-- AndroidManifest.xml|-- /src|------- /main.java // Activity 확장|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장|--- /res|------- /layout-land // 가로 방향 레이아웃|----------- /main.xml // 가로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 )|----------- /fragment1.xml // Fragment 1 UI 레이아웃|----------- /fragment2.xml // Fragment 2 UI 레이아웃 가로 방향|------- /layout-port // 세로 방향 레이아웃|----------- /main.xml // 세로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 )|----------- /fragment2.xml // Fragment 2 UI 레이아웃 세로 방향|------- /values-xlarge| . . .

Page 10: Introducing Fragments

10페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 : main.java

• 메인 Activity 는 onCreate() 동안 일반적인 방법으로 레이아웃을 적용합니다

• setContentView(R.layout.main) 는 <fragment> 태그가 있는 레이아웃이 포함된 리소스 파일을 로드합니다 . Fragment 는 Activity 가 레이아웃을 로드하는 즉시 인스턴스화됩니다 .

Page 11: Introducing Fragments

11페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 : 메인 레이아웃

fragment1 ( 목록 )

fragment2 ( 디테일 )

가로옆으로 나란히

Page 12: Introducing Fragments

12페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 : 메인 레이아웃

세로위에서 아래로

목록 폭 및 높이가 반전되어야 함

Page 13: Introducing Fragments

13페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 : Fragment 목록

목록 어댑터 설정

목록 항목 콜백 생성

이미지 업데이트

Activity 생성 후 실행할 새 수명 호출

디테일 Fragment 찾기

Page 14: Introducing Fragments

14페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 : Fragment 디테일

디테일 보기를 올리고 첫 번째 이미지 로드

목록 위치를 기반으로 이미지 교체

Page 15: Introducing Fragments

15페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

3.0 코드 :Fragment UI

(fragment1)목록 항목

(fragment2)프레임 항목(ImageView 포함 )

Page 16: Introducing Fragments

16페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

• UI 리소스 정의

– Activity 와 동일한 뷰 (View) 와 뷰 그룹을 사용합니다

UI 가 포함된 Fragment

listfragment.xml <TextView>

fragment.xml <FrameLayout>

<ImageView> <LinearLayout> <GridView> [. . .]

dialogfragment

Page 17: Introducing Fragments

17페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

UI 가 포함되지 않은 Fragment

Page 18: Introducing Fragments

18페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

findFragmentByTag()

public static class WorkerFragment extends Fragment {[. . .] // 백그라운드 쓰레드에서 해당 작업 수행

}

public static class myOtherFragment extends Fragment { @Override public void onActivityCreated(Bundle savedInstanceState) {

            super.onActivityCreated(savedInstanceState);

FragmentManager fm = getFragmentManager();

// 워커 Fragment 가 유지되었는지 확인합니다 .mWorkFragment = (WorkerFragment)fm.findFragmentByTag("work");

// 유지되지 않았다면 ( 또는 최초로 실행 중인 경우 ) 생성해야 합니다 .if (mWorkFragment == null) {   mWorkFragment = new WorkerFragment();

    // 무엇과 작동 중인지 알려줍니다 .    mWorkFragment.setTargetFragment(this, 0);    fm.beginTransaction().add(mWorkFragment, "work").commit();

} }}

Page 19: Introducing Fragments

19페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Android Compatibility( 호환 ) 패키지

• “ 모두를 위한 Fragment” 로 알려져 있음• Honeycomb 과 Android Compatibility( 호환 ) 패키지 비교• 차이점이 무엇입니까 ?

• Compatibility Library( 호환 라이브러리 ) 가 API 레벨 4 이상과 작동 가능

• 프로젝트에 새로운 라이브러리를 추가해야 함• 새로운 Activity 종류• 새로운 API

Page 20: Introducing Fragments

20페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

이중 창 (Android 2.2( 가로 방향 ))

Page 21: Introducing Fragments

21페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

단일 창 (Android 2.2( 세로 방향 ))

Page 22: Introducing Fragments

22페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment – 이중 창

Fragment 목록

Fragment

FragmentActivity1

findFragmentById(R.id.DetailFragment)

setContentView(R.layout.main)

Page 23: Introducing Fragments

23페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment – 단일 창

Fragment

FragmentActivity1

FragmentActivity2

Fragment 목록

intent.setClass(getActivity(),Fragment2.class);startActivity(intent);

setContentView(R.layout.main)

findViewById(R.id.DetailFragment) is NULL

Page 24: Introducing Fragments

24페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Compatibility Library( 호환 라이브러리 ) 수정

• 리소스를 업데이트합니다– 세로 방향 레이아웃에는 fragment1 태그만 있습니다 (fragment2 태그 없음 )

• 코드를 업데이트합니다– android.v4.support 를 가져옵니다 .*

– 방향에 따라 boolean 을 설정합니다

– 가로 방향일 경우 (orientation == landscape) 이중 창입니다

• fragment1 및 fragment2 를 표시합니다

– 세로 방향일 경우 (orientation == portrait) 단일 창입니다

• intent 를 통해 새로운 FragmentActivity 에서 fragment2 를 엽니다

– getFragmentManager() 대신에 getSupportFragmentManager() 를 호출합니다

Page 25: Introducing Fragments

25페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

프로젝트 해부 – 이중 창 + 단일 창(Android Compatibility 패키지 )

myFragmentProject|-- AndroidManifest.xml|-- /src|------- /main.java // FragmentActivity 확장|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2Main.java // FragmentActivity 확장 |--- /res|------- /layout-land // 가로 방향 레이아웃 ( 태블릿의 정상적인 방향 )|----------- /main.xml // 태블릿 또는 가로 방향 애플리케이션 리소스 파일 ( 이중 )|----------- /fragment1.xml // Fragment1 UI 레이아웃|----------- /fragment2.xml // Fragment2 UI 레이아웃|------- /layout-port // 세로 방향 레이아웃 ( 스마트폰의 정상적인 방향 )|----------- /main.xml // 스마트폰 또는 세로 방향 애플리케이션 리소스 파일 ( 단일 )|----------- /fragment1.xml|------- /values-xlarge| . . .

Page 26: Introducing Fragments

26페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Android Compatibility( 호환 ) 패키지 이용

• 환경 설정

– Android SDK 및 AVD Manager 를 이용하여 “ Android Compatibility Package”( 호환 패키지 ) 를 다운로드합니다 . SDK 설치 디렉토리에 extras/android/compatibility/v4/android-support-v4.jar 가 있습니다 .

– 선택한 API 레벨 (4-10) 에서 새 Android Project( 프로젝트 ) 를 생성합니다 .

– android-support-v4.jar 를 프로젝트의 /libs 디렉토리에 추가합니다 .

– Studio 또는 Eclipse 사용자인 경우에는 프로젝트 구축 경로에도 추가합니다(Project -> Properties -> Java Build Path -> Libraries -> Add JAR).

Page 27: Introducing Fragments

27페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment 사용 : 정보

• 3.0 Developer Guide 에 있는 Fragment 에 대한 대한 기본 정보• 3.0 Reference for APIs 참조

– android.app.Fragment

– android.app.ListFragment

• ListActivity 와 유사한 목록을 표시합니다

– android.app.DialogFragment

• 부동 대화 상자를 표시합니다

– android.app.FragmentManager

• Fragment 와 상호 작용을 위한 인터페이스 (findFragmentById)

– android.app.FragmentTransaction

• Fragment 작동을 위한 API(add, remove, replace, hide, show)

Page 28: Introducing Fragments

28페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

Fragment 사용 : 견본

• Android 3.0 Fragment 를 위한 Honeycomb Gallery 앱

• Android Compatibility 패키지의 extra 폴더에서– /android-sdk/extras/android/compatibility/v4/samples/ApiDemos/src/com/example/

android/apis/app/

– HC 버전용 Fragment<>.java 를 찾습니다

– Android Compatibility 패키지 코드용 Fragment<>Support*.java

• Reto Meier 의 블로그 게시물– http://blog.radioactiveyak.com/2011/02/android-app-surgery-earthquake-redux.html

– http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

• Diane Hackborne 의 블로그 게시물– http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html

(Android 3.0 Fragment API)

Page 29: Introducing Fragments

29페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

자발적인 참여 : developer.motorola.com

• 디스커션 보드에 참여 하시 여러분의 질문에 대한 답변 및 조언을 받으십시오

– http://community.developer.motorola.com/

• 도구를 사용해 보십시오– MOTODEV Studio: 추가적 기능 ( 문자열 로컬화 , 데이터베이스 관리자 , 코드

정보 ) 이 있는 이클립스 기반의 IDE

– App Validator: Android 앱의 호환성과 일관성을 검사하기 위한 온라인 도구

• 트위터 (Twitter) 에서 트윗하십시오– appsum11kr

• 제품 사양 참조– http://developer.motorola.com/products/xoom/

Page 30: Introducing Fragments

감사합니다

© 2010 Motorola Mobility, Inc.

46

Page 31: Introducing Fragments

31페이지

© 2011 Motorola Mobility, Inc.

Fragment 소개

법적 고지 라이센스 주의 사항

따로 기재된 사항이 없다면 Motorola Mobility Inc. 가 기술하고 제공하는 견본 소스 코드는 아래 설명과 같이 사용이 허가됩니다 .

Copyright © 2010-2011, Motorola, Inc. All rights reserved( 달리 명시적으로 표시한 것은 예외 ).• 수정 유무를 막론하고 소스 및 2진수 형태로의 재배포 및 사용은 다음 조건이 충족될 경우에만 허용됩니다 .• 소스 코드의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 유지해야 합니다 .• 2진수 형태로의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 배포물과 함께 제공되는 문서 및 / 또는 기타 자료에 복제해야 합니

다 .

구체적인 사전 서면 허가가 없이는 이 소프트웨어에서 파생된 제품을 보증하고 홍보하는 데 Motorola, Inc. 이름 및 해당 기여자의 이름을 사용할 수 없습니다 .

이 소프트웨어는 저작권 소유자와 기여자에 의해 " 있는 그대로 " 제공되며 모든 명시적 또는 묵시적 보증 ( 상품성 및 특정 목적에 대한 적합성에 대한 묵시적 보증을 포함하며 여기에 제한되지 않음 ) 을 배제합니다 . 저작권 소유자 또는 기여자는 이 소프트웨어의 사용으로 인해 발생하는 모든 직접적 , 간접적 , 부수적 , 예외적 , 전형적 또는 결과적 손해 ( 대체품이나 대체 서비스의 조달 , 사용 , 데이터 또는 이익 손실 , 또는 영업 중단을 포함하되 이에 제한되지 않음 ) 에 대하여 계약에 의한 것이든 , 엄밀한 책임 또는 불법 행위 ( 또는 과실과 기타 행위를 포함하여 ) 에 의한 것이든 이와 여타 책임 소재에 상관없이 어떠한 경우에도 책임을 지지 않으며 , 이는 그와 같은 손해의 가능성을 사전에 알고 있던 경우에도 마찬가지입니다

이 프레젠테이션에서 표시되는 기타 소스 코드는 다른 라이센스 하에 제공될 수도 있습니다 .

Apache 2.0Copyright © 2010, Android Open Source Project. All rights reserved( 달리 명시적으로 표시한 것은 예외 ).

Apache 라이센스 하에서 사용이 허가됨 , 버전 2.0(" 라이센스 "); 이 라이센스를 준수하지 않고는 이 파일을 사용할 수 없습니다 . http://www.apache.org/licenses/LICENSE-2.0에서 라이센스 사본을 얻을 수 있습니다 .

해당 법률에 의해 필요하거나 서면 동의가 있지 않는 한 이 라이센스 하에서 배포되는 소프트웨어는 명시적이든 묵시적이든 막론하고 어떠한 보증이나 조건 없이 "있는 그대로 " 배포됩니다 . 이 라이센스 하의 특정 언어 관리 허가 및 제한 사항은 라이센스를 참조하십시오 .

Creative Commons 3.0 귀속 라이센스

이 프레젠테이션의 일부는 Google 이 생성하고 공유하는 작업에서 복제된 것이며 (http://code.google.com/policies.html) Creative Commons 3.0 귀속 라이센스(http://creativecommons.org/licenses/by/3.0/) 에 설명된 약관에 따라 사용되었습니다 .