Android Fragment 동적 관리 및 화면 전환 구현

Android 개발에서 Fragment는 UI의 일부를 모듈화하여 재사용할 수 있게 해주는 구성 요소로, 'Activity 내부의 미니 Activity'와 같은 역할을 수행합니다. 특정 영역을 프래그먼트로 동적으로 교체하려면 FragmentManagerFragmentTransaction을 활용해야 합니다.

레이아웃 구성

먼저 프래그먼트가 배치될 컨테이너인 FrameLayout을 메인 레이아웃에 정의합니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_load_first"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="프래그먼트 A 로드"/>

    <Button
        android:id="@+id/btn_load_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="프래그먼트 B 로드"/>

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

프래그먼트 구현

Fragment 클래스를 상속받아 뷰를 인플레이트하고 데이터를 전달받는 예제입니다.

public class ContentFragment extends Fragment {
    private static final String LOG_TAG = "ContentFragment";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            String data = getArguments().getString("key_data");
            Log.d(LOG_TAG, "전달받은 데이터: " + data);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_content, container, false);
    }
}

FragmentTransaction을 이용한 화면 전환

Activity에서 버튼 클릭 시 프래그먼트를 교체하는 로직입니다. addToBackStack을 사용하면 시스템 뒤로 가기 버튼을 눌렀을 때 이전 프래그먼트로 돌아갈 수 있습니다.

private void navigateToFragment(Fragment fragment, Bundle bundle) {
    if (bundle != null) {
        fragment.setArguments(bundle);
    }

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    
    // R.id.fragment_container 영역을 지정한 프래그먼트로 대체
    transaction.replace(R.id.fragment_container, fragment);
    
    // 백스택에 추가하여 뒤로가기 기능 지원
    transaction.addToBackStack(null);
    transaction.commit();
}

// 호출 예시
btnLoad.setOnClickListener(v -> {
    Bundle args = new Bundle();
    args.putString("key_data", "Hello Fragment");
    navigateToFragment(new ContentFragment(), args);
});

태그: Android Fragment FragmentManager UI-Layout

6월 6일 18:13에 게시됨