반응형

 여러분은 액티비티의 모듈 섹션(modular section)으로서 프레그먼트를 생각할 수 있습니다. 이 프레그먼트는 자신의 라이프사이클(lifecycle)을 가지며, 입력 이벤트(Input Events)도 받을 수 있고, 액티비티가 실행하는 동안에 추가하거나 제거할 수도 있습니다.( 여러분이 다른 액티비티에서 재사용할 수 있는 "sub Activity" 같은 종류). 이번 시간에는 Support Library 를 사용하여 Fragment 클래스를 상속(확장)하는 방법을 보여드립니다. Support Library 를 사용함으로서 여러분의 앱은 Android 1.6 처럼 낮은 버전에의 시스템에서 구동하고 있는 단말기에서도 여전히 호환될 수 있도록 할 수 있습니다. 


 Note : 만약 여러분이 minimum API level 을 11버전 이상을 요구하도록 결정했다면, Support Library 를 사용할 필요가 없으며,Fragment 클래스와 관련된 APIs을 이용하여 프레그먼트의 생성을 대신하도록 할 수 있습니다. 단지, 이번 시간에는 Support Library로부터 APIs 을 사용하도록 초점을 맞추었기 때문에, 몇가지 플랫폼 안에 포함된 버전과는 조금 다른 API 이름과 특정 패키지 표시가 사용될 것임을 알아주시기 바랍니다.


 여러분은 이번 장을 시작하기 전에, Support Library 를 사용하여 Android 프로젝트를 만들도록 해야만 합니다. 만약 여러분이 이전에Support Library 를 사용하지 않았다면, 여러분의 프로젝트에 개발자 사이트의 Support Library Setup 문서를 보고 따라해서 v4 library를 사용하도록 설정하시기 바랍니다. 어쨋든, 여러분은 v7 appcompat library 를 사용하여 여러분의 액티비티안에 액션바(actiob bar)를 포함하고 있어야 합니다. 이로 인해 Fragments APIs 를 포함하면서 Android 2.1(API level 7) 버전과도 호환되도록 할 수 있습니다.



프레그먼트 클래스 만들기(Create a Fragment Class)

---------------------------------------------------

 하나의 프레그먼트를 만들기 위해 Fragment 클래스를 상속(확장)하고 나서 , Activity 클래스에서 여러분이 했던 방법과 비슷하게 앱의 로직을 작성하기 위해 주요한 라이프사이클(lifecycle) 메소드들을 오버라이드(override)합니다.


 한가지 다른점은 프레그먼트를 만들때 레이아웃을 정의하기 위해 onCreateView() 콜백(callback) 메소드를 사용해야만 한다는 것입니다. 사실, 이것이 프레그먼트를 실행하는데 필요한 유일한 콜백(callback) 입니다. 아래 프레그먼트의 레이아웃을 지정하는 간단한 프레그먼트 예제가 있습니다.


 import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.ViewGroup;


public class ArticleFragment extends Fragment {

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

        Bundle savedInstanceState) {

        // Inflate the layout for this fragment

        return inflater.inflate(R.layout.article_view, container, false);

    }

}


단지 액티비티처럼, 프레그먼트(fragment)가 액티비티로부터 추가되거나 제거되기도 하고, 액티비티의 라이프사이클 상태들 사이의 전환과 같은 상태를 관리할 수 있으려면 다른 라이프사이클(lifecycle) 콜백(callback) 메소드들을 구현하면 됩니다.


 fragment 라이프사이클(lifecycle)과 콜백(callback) 메소드에 대한 더 많은 정보를 원한다면, 개발자 사이트의 Fragments 가이드를 참고하시기 바랍니다.






XML을 사용하여 Activity에 프레그먼트 추가하기

Add a Fragment to an Activity using XML )

----------------------------------------

 UI 컴포턴트(components) 모듈로서 프레그먼트를 재사용하는 동안, 각 각의 Fragment 인스턴스(instance)는 반드시 부모로서FragmentActivity와 조합하여야만 합니다. 여러분은 액티비티 레이아웃 XML 파일안에 프레그먼트(fragment)를 정의함으로서 조합할 수 있습니다.


 Note : FragmentActivity API level 11 버전 이전의 시스템에서 프레그먼트를 처리하기 위해 Support Library에서 제공하는 특별한 액티비티입니다. 만약 여러분이 지원하는 가장 낮은 버전이 API level 11 이상이라면, 여러분은 정규 Activity를 사용할 수 있습니다.


아래는 "large"로 결정된 단말기 화면에서 하나의 액티비티에 두개의 프레그먼트를 추가한 레이아웃파일의 예제 입니다.


res/layout-large/news-articles.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="horizontal"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">


    <fragment android:name="com.example.android.fragments.HeadlinesFragment"

              android:id="@+id/headlines_fragment"

              android:layout_weight="1"

              android:layout_width="0dp"

              android:layout_height="match_parent" />


    <fragment android:name="com.example.android.fragments.ArticleFragment"

              android:id="@+id/article_fragment"

              android:layout_weight="2"

              android:layout_width="0dp"

              android:layout_height="match_parent" />


</LinearLayout>

Tip : 다른 화면 사이즈에 대한 레이아웃 만들기에 대한 자세한 내용은 앞에 포스팅한 "다른 크기, 해상도, 밀도의 화면들 지원하기(Supporting Difference Screens) "를 보시기 바랍니다.


그런다음 여러분에 액티비티에 위의 레이아웃을 적용합니다.

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;


public class MainActivity extends FragmentActivity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.news_articles);

    }

}

 

만약 v7 appcompat library를 사용한다면, 여러분의 액티비티는 FragmentActivity의 서브클래스(sub class)인 ActionBarActivity를 상속(확장) 해야만 합니다. ( 추가 정보는 앞전 포스팅의 "Action Bar(액션바) 추가하기"를 참고하세요)



 Note : 여러분이 XML 파일안에서 프레그먼트(fragment)를 정의하여 액티비티 레이아웃에 추가했을 때는 실행중에 프레그먼트(fragment)를 제거할 수 없습니다. 만약 사용자와 상호작용(interaction) 중에 프레그먼트의 안밖을 전환할 계획이라면, 여러분은 액티비티가 처음 시작될 때 액티비티에 프레그먼트를 추가해야만 합니다. 다음포스트에서 보여드릴 겁니다.  

반응형

+ Recent posts