Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

프래그먼트 만들기

프래그먼트를 활동의 모듈식 섹션이라고 생각할 수 있습니다. 자체 수명 주기가 있고 자체 입력 이벤트를 수신하며 활동이 실행되는 동안 추가하거나 삭제할 수 있습니다. 다른 활동에서 재사용할 수 있는 '하위 활동' 정도로 보면 됩니다. 이 과정은 Android 1.6과 같은 낮은 시스템 버전을 실행하는 기기와 앱이 호환성을 유지할 수 있도록 지원 라이브러리를 이용해 Fragment 클래스를 확장하는 방법을 보여줍니다.

프래그먼트의 수명 주기 메서드에서 종속적 구성요소를 설정하는 대신 수명 주기 인식 구성요소를 만들어야 합니다. 이 구성요소는 프래그먼트가 수명 주기를 통과할 때 필요한 설정이나 해체 작업을 처리할 수 있습니다. 그런 다음 수명 주기 인식 구성요소는 다른 프래그먼트와 활동에서 재사용되어 코드 중복을 방지하고 프래그먼트/활동 자체에서 실행해야 하는 설정의 양을 줄일 수 있습니다. 자세한 내용은 수명 주기 인식 구성요소로 수명 주기 처리를 읽어보세요.

이 과정을 시작하기 전에 먼저 Android 프로젝트에서 지원 라이브러리를 사용하도록 설정해야 합니다. 지원 라이브러리를 사용해본 적이 없다면, 지원 라이브러리 설정 문서에 따라 v4 라이브러리를 사용하도록 프로젝트를 설정하세요. 하지만, Android 2.1(API 수준 7)과 호환되고 Fragment API도 포함하는 v7 appcompat 라이브러리를 대신 사용하여 앱 바를 활동에 포함할 수도 있습니다.

프래그먼트 구현에 관한 자세한 내용은 프래그먼트를 참조하세요. 관련 샘플 앱을 탐색하여 자세히 알아볼 수도 있습니다.

프래그먼트 클래스 만들기

프래그먼트를 생성하려면 Fragment 클래스를 확장한 후 Activity 클래스에서와 마찬가지로 주요 수명 주기 메서드를 재정의하여 자체 앱 로직을 삽입합니다.

Fragment 생성 시 한 가지 차이점은 레이아웃 정의에 onCreateView() 콜백을 사용해야 한다는 점입니다. 사실 프래그먼트 실행에 필요한 콜백은 이것뿐입니다. 예를 들어 다음은 자체 레이아웃을 지정하는 간단한 프래그먼트입니다.

Kotlin

    import android.os.Bundle
    import android.support.v4.app.Fragment
    import android.view.LayoutInflater
    import android.view.ViewGroup

    class ArticleFragment : Fragment() {
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup,
                         savedInstanceState: Bundle?): View {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.article_view, container, false)
        }
    }
    

자바

    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);
        }
    }
    

활동과 마찬가지로 프래그먼트는 다른 수명 주기 콜백을 구현해야 합니다. 이 콜백으로 프래그먼트가 활동에 추가되거나 활동에서 삭제될 때 그리고 활동이 수명 주기 상태 간에 전환될 때 프래그먼트 상태를 관리할 수 있습니다. 예를 들어, 활동의 onPause() 메서드가 호출되면 활동 내 모든 프래그먼트도 onPause() 호출을 받게 됩니다.

프래그먼트 수명 주기 및 콜백 메서드에 관한 자세한 내용은 프래그먼트 개발자 가이드를 참조하세요.

XML을 사용하여 활동에 프래그먼트 추가

프래그먼트는 재사용이 가능한 모듈식 UI 구성요소인 반면, Fragment 클래스의 각 인스턴스는 상위 FragmentActivity와 연결되어야 합니다. 활동 레이아웃 XML 파일 안에 각 프래그먼트를 정의하여 이 연결을 달성할 수 있습니다.

참고: FragmentActivity는 지원 라이브러리에서 제공하는 특수한 활동이며, API 수준 11보다 낮은 시스템 버전에서 프래그먼트를 처리하는 데 사용합니다. 지원하는 가장 낮은 시스템 버전이 API 수준 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>
    

팁: 다양한 화면 크기의 레이아웃 만들기에 관한 자세한 내용은 다양한 화면 크기 지원을 읽어보세요.

그런 다음 활동에 레이아웃을 적용합니다.

Kotlin

    import android.os.Bundle
    import android.support.v4.app.FragmentActivity

    class MainActivity : FragmentActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.news_articles)
        }
    }
    

자바

    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 라이브러리를 사용하는 경우, 활동은 FragmentActivity의 서브클래스인 AppCompatActivity를 대신 확장해야 합니다. 자세한 내용은 앱 바 추가하기를 읽어보세요.

참고: 레이아웃 XML 파일에서 프래그먼트를 정의하여 활동 레이아웃에 추가하면 런타임 시 프래그먼트를 삭제할 수 없습니다. 사용자 상호작용 중에 프래그먼트를 넣었다 뺐다 하려면 유연한 UI 빌드에서 보듯이 활동이 처음 시작될 때 프래그먼트를 활동에 추가해야 합니다.