Android 개발에서 Fragment는 UI의 일부를 모듈화하여 재사용할 수 있게 해주는 구성 요소로, 'Activity 내부의 미니 Activity'와 같은 역할을 수행합니다. 특정 영역을 프래그먼트로 동적으로 교체하려면 FragmentManager와 FragmentTransaction을 활용해야 합니다.
레이아웃 구성
먼저 프래그먼트가 배치될 컨테이너인 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);
});