Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducing Fragments

4,138 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

Introducing Fragments

  1. 1. Motorola Mobility Anna Schaller Android 기술 전도사 개발자 플랫폼 및 서비스 Fragment 소개
  2. 2. Fragment <ul><li>애플리케이션을 하위 구성 요소로 나누어 개별적으로 관리하고 다양한 방법으로 결합할 수 있도록 해줍니다 ( 예 : 다중 창 UI 만들기 ). </li></ul>
  3. 3. 왜 Fragment 인가 ? <ul><li>개발자의 관점에서 볼 때 스마트폰과 태블릿 간 가장 큰 차이점은 화면 크기입니다 . </li></ul><ul><li>Fragment 는 스마트폰과 태블릿 모두에 맞게 최적화하고 싶은 앱을 위한 가교를 만들어 줍니다 </li></ul>Fragment 가 두 개인 Activity A 또는
  4. 4. 준비 (Getting there) <ul><li>준비하기 위한 두 가지 방법 </li></ul><ul><ul><li>Android 3.0 SDK </li></ul></ul><ul><ul><li>Android Compatibility( 호환 ) 패키지 </li></ul></ul><ul><li>다수의 레이아웃 </li></ul><ul><ul><li>어디에서나 이중 + 창 지원 </li></ul></ul><ul><ul><li>어디에서나 단일 창 지원 </li></ul></ul><ul><li>Activity 가 여전히 필요함 </li></ul><ul><li>두 개 정도의 Fragment 만들기 </li></ul><ul><li>표시되는 각 Fragment 의 경우 UI 를 추가 </li></ul><ul><li>Fragment 를 Activity 에 추가 </li></ul>
  5. 5. <ul><li>화면 크기 </li></ul><ul><ul><li>소 , 중 , 대 , 초대 형 </li></ul></ul><ul><li>각 화면 크기에는 2 가지 방향이 있습니다 </li></ul><ul><ul><li>가로 </li></ul></ul><ul><ul><li>세로 </li></ul></ul><ul><li>여러 구성에 대한 계획 수립 </li></ul><ul><ul><li>/res/layout-small-land 및 /res/layout-small-port </li></ul></ul><ul><ul><li>/res/layout-normal-land 및 /res/layout-normal-port </li></ul></ul><ul><ul><li>/res/layout-large-land 및 /res/layout-large-port </li></ul></ul><ul><ul><li>/res/layout-xlarge-land 및 /res/layout-xlarge-land </li></ul></ul>레이아웃에 대한 계획 수립
  6. 6. 이중 창 ( 가로 및 세로 )
  7. 7. Fragment – 이중 창 Fragment 목록 Fragment Activity findFragmentById(R.id. DetailFragment ) setContentView(R.layout. main )
  8. 8. Android 3.0 에서 Fragment 작업하기 <ul><li>각 Fragment 를 위한 새 클래스를 만듭니다 </li></ul><ul><ul><li>android.app.Fragment ; 를 가져옵니다 </li></ul></ul><ul><ul><li>Fragment 또는 ListFragment 를 확장합니다 (Activity 대신 ) </li></ul></ul><ul><ul><li>수명 (Lifecycle) 호출을 추가합니다 </li></ul></ul><ul><li>각 Fragment 에 대한 새 resource.xml 파일을 생성합니다 </li></ul><ul><ul><ul><li><ViewGroup> <UI elements> </ViewGroup> </li></ul></ul></ul><ul><li>각 Fragment 를 위한 새 Fragment 태그로 main.xml 을 업데이트합니다 </li></ul><ul><ul><li><fragment class=“my.new.fragment.class” </li></ul></ul><ul><ul><li>android:id=“@+id/fragmentIdX> </li></ul></ul><ul><li>MainApp.java 에서 (Activity 확장 ) </li></ul><ul><ul><li>setContentView(R.layout.main) 로 애플리케이션 레이아웃을 로드합니다 </li></ul></ul><ul><li>Fragment1 목록 항목이 findFragmentById(R.id.fragmentIdX) 로 Fragment2 에 연결됩니다 . </li></ul>
  9. 9. 프로젝트 해부 – 이중 창만 해당 (Android 3.0) <ul><li>myFragmentProject </li></ul><ul><li>|-- AndroidManifest.xml </li></ul><ul><li>|-- /src </li></ul><ul><li>|------- /main.java // Activity 확장 </li></ul><ul><li>|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장 </li></ul><ul><li>|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장 </li></ul><ul><li>|--- /res </li></ul><ul><li>|------- /layout-land // 가로 방향 레이아웃 </li></ul><ul><li>|----------- /main.xml // 가로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 ) </li></ul><ul><li>|----------- /fragment1.xml // Fragment 1 UI 레이아웃 </li></ul><ul><li>|----------- /fragment2.xml // Fragment 2 UI 레이아웃 가로 방향 </li></ul><ul><li>|------- /layout-port // 세로 방향 레이아웃 </li></ul><ul><li>|----------- /main.xml // 세로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 ) </li></ul><ul><li>|----------- /fragment2.xml // Fragment 2 UI 레이아웃 세로 방향 </li></ul><ul><li>|------- /values-xlarge </li></ul><ul><li>| . . . </li></ul>
  10. 10. 3.0 코드 : main.java <ul><li>메인 Activity 는 onCreate() 동안 일반적인 방법으로 레이아웃을 적용합니다 </li></ul><ul><li>setContentView( R.layout.main ) 는 <fragment > 태그가 있는 레이아웃이 포함된 리소스 파일을 로드합니다 . Fragment 는 Activity 가 레이아웃을 로드하는 즉시 인스턴스화됩니다 . </li></ul>
  11. 11. 3.0 코드 : 메인 레이아웃 fragment1 ( 목록 ) fragment2 ( 디테일 ) 가로 옆으로 나란히
  12. 12. 3.0 코드 : 메인 레이아웃 세로 위에서 아래로 목록 폭 및 높이가 반전되어야 함
  13. 13. 3.0 코드 : Fragment 목록 목록 어댑터 설정 목록 항목 콜백 생성 이미지 업데이트 Activity 생성 후 실행할 새 수명 호출 디테일 Fragment 찾기
  14. 14. 3.0 코드 : Fragment 디테일 디테일 보기 를 올리고 첫 번째 이미지 로드 목록 위치를 기반으로 이미지 교체
  15. 15. 3.0 코드 : Fragment UI (fragment1) 목록 항목 (fragment2) 프레임 항목 (ImageView 포함 )
  16. 16. <ul><li>UI 리소스 정의 </li></ul><ul><ul><li>Activity 와 동일한 뷰 (View) 와 뷰 그룹을 사용합니다 </li></ul></ul>UI 가 포함된 Fragment listfragment.xml <TextView> fragment.xml <FrameLayout> <ImageView> <LinearLayout> <GridView> [. . .] dialogfragment
  17. 17. UI 가 포함되지 않은 Fragment
  18. 18. findFragmentByTag() <ul><li>public static class WorkerFragment extends Fragment { </li></ul><ul><li>[. . .] // 백그라운드 쓰레드에서 해당 작업 수행 </li></ul><ul><li>} </li></ul><ul><li>public static class myOtherFragment extends Fragment { </li></ul><ul><li>@Override </li></ul><ul><li>public void onActivityCreated(Bundle savedInstanceState) {             super.onActivityCreated(savedInstanceState); </li></ul><ul><li>FragmentManager fm = getFragmentManager () ; // 워커 Fragment 가 유지되었는지 확인합니다 . mWorkFragment = ( WorkerFragment ) fm. findFragmentByTag (&quot;work&quot;) ; // 유지되지 않았다면 ( 또는 최초로 실행 중인 경우 ) 생성해야 합니다 . if (mWorkFragment == null) {    mWorkFragment = new WorkerFragment (); </li></ul><ul><li>    // 무엇과 작동 중인지 알려줍니다 .     mWorkFragment.setTargetFragment(this, 0);     fm.beginTransaction().add(mWorkFragment, &quot;work&quot;).commit(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. Android Compatibility( 호환 ) 패키지 <ul><ul><li>“ 모두를 위한 Fragment” 로 알려져 있음 </li></ul></ul><ul><ul><li>Honeycomb 과 Android Compatibility( 호환 ) 패키지 비교 </li></ul></ul><ul><ul><li>차이점이 무엇입니까 ? </li></ul></ul><ul><ul><ul><li>Compatibility Library( 호환 라이브러리 ) 가 API 레벨 4 이상과 작동 가능 </li></ul></ul></ul><ul><ul><ul><li>프로젝트에 새로운 라이브러리를 추가해야 함 </li></ul></ul></ul><ul><ul><ul><li>새로운 Activity 종류 </li></ul></ul></ul><ul><ul><ul><li>새로운 API </li></ul></ul></ul>
  20. 20. 이중 창 (Android 2.2( 가로 방향 ))
  21. 21. 단일 창 (Android 2.2( 세로 방향 ))
  22. 22. Fragment – 이중 창 Fragment 목록 Fragment FragmentActivity1 findFragmentById(R.id. DetailFragment ) setContentView(R.layout. main )
  23. 23. Fragment – 단일 창 Fragment Fragment Activity1 Fragment Activity2 Fragment 목록 setContentView(R.layout. main ) findViewById(R.id. DetailFragment ) is NULL intent.setClass(getActivity(),Fragment2. class); startActivity(intent );
  24. 24. Compatibility Library( 호환 라이브러리 ) 수정 <ul><li>리소스를 업데이트합니다 </li></ul><ul><ul><li>세로 방향 레이아웃에는 fragment1 태그만 있습니다 (fragment2 태그 없음 ) </li></ul></ul><ul><li>코드를 업데이트합니다 </li></ul><ul><ul><li>android.v4.support 를 가져옵니다 .* </li></ul></ul><ul><ul><li>방향에 따라 boolean 을 설정합니다 </li></ul></ul><ul><ul><li>가로 방향일 경우 (orientation == landscape) 이중 창입니다 </li></ul></ul><ul><ul><ul><li>fragment1 및 fragment2 를 표시합니다 </li></ul></ul></ul><ul><ul><li>세로 방향일 경우 (orientation == portrait) 단일 창입니다 </li></ul></ul><ul><ul><ul><li>intent 를 통해 새로운 FragmentActivity 에서 fragment2 를 엽니다 </li></ul></ul></ul><ul><ul><li>getFragmentManager() 대신에 getSupportFragmentManager() 를 호출합니다 </li></ul></ul>
  25. 25. 프로젝트 해부 – 이중 창 + 단일 창 (Android Compatibility 패키지 ) <ul><li>myFragmentProject </li></ul><ul><li>|-- AndroidManifest.xml </li></ul><ul><li>|-- /src </li></ul><ul><li>|------- /main.java // FragmentActivity 확장 </li></ul><ul><li>|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장 </li></ul><ul><li>|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장 </li></ul><ul><li>|------- /fragment2Main.java // FragmentActivity 확장 </li></ul><ul><li>|--- /res </li></ul><ul><li>|------- /layout-land // 가로 방향 레이아웃 ( 태블릿의 정상적인 방향 ) </li></ul><ul><li>|----------- /main.xml // 태블릿 또는 가로 방향 애플리케이션 리소스 파일 ( 이중 ) </li></ul><ul><li>|----------- /fragment1.xml // Fragment1 UI 레이아웃 </li></ul><ul><li>|----------- /fragment2.xml // Fragment2 UI 레이아웃 </li></ul><ul><li>|------- /layout-port // 세로 방향 레이아웃 ( 스마트폰의 정상적인 방향 ) </li></ul><ul><li>|----------- /main.xml // 스마트폰 또는 세로 방향 애플리케이션 리소스 파일 ( 단일 ) </li></ul><ul><li>|----------- /fragment1.xml </li></ul><ul><li>|------- /values-xlarge </li></ul><ul><li>| . . . </li></ul>
  26. 26. Android Compatibility( 호환 ) 패키지 이용 <ul><li>환경 설정 </li></ul><ul><ul><li>Android SDK 및 AVD Manager 를 이용하여 “ Android Compatibility Package”( 호환 패키지 ) 를 다운로드합니다 . SDK 설치 디렉토리에 extras/android/compatibility/v4/android-support-v4.jar 가 있습니다 . </li></ul></ul><ul><ul><li>선택한 API 레벨 (4-10) 에서 새 Android Project( 프로젝트 ) 를 생성합니다 . </li></ul></ul><ul><ul><li>android-support-v4.jar 를 프로젝트의 /libs 디렉토리에 추가합니다 . </li></ul></ul><ul><ul><li>Studio 또는 Eclipse 사용자인 경우에는 프로젝트 구축 경로에도 추가합니다 (Project -> Properties -> Java Build Path -> Libraries -> Add JAR). </li></ul></ul>
  27. 27. Fragment 사용 : 정보 <ul><li>3.0 Developer Guide 에 있는 Fragment 에 대한 대한 기본 정보 </li></ul><ul><li>3.0 Reference for APIs 참조 </li></ul><ul><ul><li>android.app.Fragment </li></ul></ul><ul><ul><li>android.app.ListFragment </li></ul></ul><ul><ul><ul><li>ListActivity 와 유사한 목록을 표시합니다 </li></ul></ul></ul><ul><ul><li>android.app.DialogFragment </li></ul></ul><ul><ul><ul><li>부동 대화 상자를 표시합니다 </li></ul></ul></ul><ul><ul><li>android.app.FragmentManager </li></ul></ul><ul><ul><ul><li>Fragment 와 상호 작용을 위한 인터페이스 ( findFragmentById) </li></ul></ul></ul><ul><ul><li>android.app.FragmentTransaction </li></ul></ul><ul><ul><ul><li>Fragment 작동을 위한 API( add, remove, replace, hide, show) </li></ul></ul></ul>
  28. 28. Fragment 사용 : 견본 <ul><li>Android 3.0 Fragment 를 위한 Honeycomb Gallery 앱 </li></ul><ul><li>Android Compatibility 패키지의 extra 폴더에서 </li></ul><ul><ul><li>/android-sdk/extras/android/compatibility/v4/samples/ApiDemos/src/com/example/android/apis/app/ </li></ul></ul><ul><ul><li>HC 버전용 Fragment<>.java 를 찾습니다 </li></ul></ul><ul><ul><li>Android Compatibility 패키지 코드용 Fragment<>Support*.java </li></ul></ul><ul><li>Reto Meier 의 블로그 게시물 </li></ul><ul><ul><li>http://blog.radioactiveyak.com/2011/02/android-app-surgery-earthquake-redux.html </li></ul></ul><ul><ul><li>http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html </li></ul></ul><ul><li>Diane Hackborne 의 블로그 게시물 </li></ul><ul><ul><li>http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html (Android 3.0 Fragment API) </li></ul></ul>
  29. 29. 자발적인 참여 : developer.motorola.com <ul><ul><li>디스커션 보드에 참여 하시 여러분의 질문에 대한 답변 및 조언을 받으십시오 </li></ul></ul><ul><ul><li>http://community.developer.motorola.com/ </li></ul></ul><ul><li>도구를 사용해 보십시오 </li></ul><ul><ul><li>MOTODEV Studio: 추가적 기능 ( 문자열 로컬화 , 데이터베이스 관리자 , 코드 정보 ) 이 있는 이클립스 기반의 IDE </li></ul></ul><ul><ul><li>App Validator: Android 앱의 호환성과 일관성을 검사하기 위한 온라인 도구 </li></ul></ul><ul><li>트위터 (Twitter) 에서 트윗하십시오 </li></ul><ul><ul><li>appsum11kr </li></ul></ul><ul><ul><li>제품 사양 참조 </li></ul></ul><ul><ul><li>http://developer.motorola.com/products/xoom/ </li></ul></ul>
  30. 30. 감사합니다 © 2010 Motorola Mobility, Inc. 46
  31. 31. 법적 고지 <ul><li>라이센스 주의 사항 </li></ul><ul><li>따로 기재된 사항이 없다면 Motorola Mobility Inc. 가 기술하고 제공하는 견본 소스 코드는 아래 설명과 같이 사용이 허가됩니다 . </li></ul><ul><li>Copyright © 2010-2011, Motorola, Inc. All rights reserved( 달리 명시적으로 표시한 것은 예외 ). </li></ul><ul><li>수정 유무를 막론하고 소스 및 2 진수 형태로의 재배포 및 사용은 다음 조건이 충족될 경우에만 허용됩니다 . </li></ul><ul><li>소스 코드의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 유지해야 합니다 . </li></ul><ul><li>2 진수 형태로의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 배포물과 함께 제공되는 문서 및 / 또는 기타 자료에 복제해야 합니다 . </li></ul><ul><li>구체적인 사전 서면 허가가 없이는 이 소프트웨어에서 파생된 제품을 보증하고 홍보하는 데 Motorola, Inc. 이름 및 해당 기여자의 이름을 사용할 수 없습니다 . </li></ul><ul><li>이 소프트웨어는 저작권 소유자와 기여자에 의해 &quot; 있는 그대로 &quot; 제공되며 모든 명시적 또는 묵시적 보증 ( 상품성 및 특정 목적에 대한 적합성에 대한 묵시적 보증을 포함하며 여기에 제한되지 않음 ) 을 배제합니다 . 저작권 소유자 또는 기여자는 이 소프트웨어의 사용으로 인해 발생하는 모든 직접적 , 간접적 , 부수적 , 예외적 , 전형적 또는 결과적 손해 ( 대체품이나 대체 서비스의 조달 , 사용 , 데이터 또는 이익 손실 , 또는 영업 중단을 포함하되 이에 제한되지 않음 ) 에 대하여 계약에 의한 것이든 , 엄밀한 책임 또는 불법 행위 ( 또는 과실과 기타 행위를 포함하여 ) 에 의한 것이든 이와 여타 책임 소재에 상관없이 어떠한 경우에도 책임을 지지 않으며 , 이는 그와 같은 손해의 가능성을 사전에 알고 있던 경우에도 마찬가지입니다 </li></ul><ul><li>  이 프레젠테이션에서 표시되는 기타 소스 코드는 다른 라이센스 하에 제공될 수도 있습니다 . 
 </li></ul><ul><li>Apache 2.0 </li></ul><ul><li>Copyright © 2010, Android Open Source Project. All rights reserved( 달리 명시적으로 표시한 것은 예외 ). </li></ul><ul><li>Apache 라이센스 하에서 사용이 허가됨 , 버전 2.0(&quot; 라이센스 &quot;); 이 라이센스를 준수하지 않고는 이 파일을 사용할 수 없습니다 . http://www.apache.org/licenses/LICENSE-2.0 에서 라이센스 사본을 얻을 수 있습니다 . </li></ul><ul><li>해당 법률에 의해 필요하거나 서면 동의가 있지 않는 한 이 라이센스 하에서 배포되는 소프트웨어는 명시적이든 묵시적이든 막론하고 어떠한 보증이나 조건 없이 &quot; 있는 그대로 &quot; 배포됩니다 . 이 라이센스 하의 특정 언어 관리 허가 및 제한 사항은 라이센스를 참조하십시오 . </li></ul><ul><li>Creative Commons 3.0 귀속 라이센스 </li></ul><ul><li>이 프레젠테이션의 일부는 Google 이 생성하고 공유하는 작업에서 복제된 것이며 (http://code.google.com/policies.html) Creative Commons 3.0 귀속 라이센스 (http://creativecommons.org/licenses/by/3.0/) 에 설명된 약관에 따라 사용되었습니다 . </li></ul>

×