API 11의 주요 기능중에 하나인 Fragment 를 기존 장비 (API 8, 9, 10)에서 돌릴 수 있는 방법을 설명합니다.

API 11의 API demos program에서 FragmentLayout.java 에 대해 이를 단독으로 돌릴 수 있는 방법에 대해 설명하겠습니다.

(환경 설정)
1. 일단 Eclipse에서 최신 version을 모두 받았다면 {SDK}/extras/android/compatibility/v4/android-support-v4.jar 이 있을것입니다.
이를 자기가 만드는 project의 root directory에서 libs directory를 만든후 여기에 copy를 합니다.

2. Eclipse에서 만들고자 하는 project에 마우스 오른쪽을 누르면 메뉴가 나오는데 여기서 build path - add external archives 에서
1번에서 copy한 jar file을 선택합니다. 이 결과 Eclipse project 에서 Referenced Libraries 및 libs 에 2번 android-support-v4.jar 이 표시될 것입니다.

(프로그램 변경)
3. API 11에선 Framgment가 android.app.Activity 안에 모두 들어 있으나 API 8~10 에는 이게 없기에 android.support.v4.app.Fragment 등을 import 해줍니다. 또한 Fragment를 사용 Activity에서 FragmentActivity로 extends class 이름을 변경합니다.
public class FragmentLayout extends Activity {   -->   public class FragmentLayout extends FragmentActivity { }
public static class DetailsActivity extends Activity { --> public static class DetailsActivity extends FragmentActivity {
만약 두번쨰 activity class 이름만 변경시 compile은 되지만 실행시 error를 냅니다.

4. android.app.Activity.getFragmentManager() 가 android.support.v4.app.FragmentActivity.getSupportFragmentManager() 에 구현되어 있으니 이름을 변경하시기 바랍니다.
getFragmentManager()  --> getSupportFragmentManager()

5. API 11에서 신설되어 사용하는 변수를 API 8~10 에서 사용하는 변수로 변경하여야 합니다.
setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_acrtivated_1, Shakespeare.TITLES));
-->
setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1, Shakespeare.TITLES));

또한 android:attr/detailElementBackground 같은 것은 삭제한다.


이렇게 하면 API 8 (Android 2.2)에서도 잘 돌아 갑니다.
도움이 되길 ..

아래에 파일을 첨부했습니다.