[프로젝트] 베지도_0906 :: 프래그먼트 UI 교체

hyihyi·2023년 9월 6일
0

베지도

목록 보기
6/7

프래그먼트를 추가하거나 제거하는 것은 주로 FragmentManager와 FragmentTransaction을 사용하여 수행
add(), replace(), remove() 등의 메서드를 사용하여 프래그먼트 트랜잭션을 수행하면, 해당 프래그먼트는 FragmentManager에 의해 관리됩니다.
addToBackStack(null)을 호출하여 트랜잭션을 백 스택에 추가하면, 이전 상태로 되돌아갈 수 있는 기능이 활성화됩니다.
따라서, addToBackStack(null)을 사용하지 않으면 프래그먼트 트랜잭션은 FragmentManager의 백 스택에 추가되지 않습니다.

프래그먼트 트랜잭션을 백 스택에 추가하려면 addToBackStack(null)을 호출해야 합니다. 이렇게 하면 해당 트랜잭션 (예: 프래그먼트 추가, 제거, 교체 등)이 백 스택에 저장되어, 사용자가 뒤로 버튼을 누르면 이전 트랜잭션 상태로 되돌아갈 수 있게 됩니다.

프래그먼트 추가

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();

// R.id.fragment_container는 프래그먼트를 추가하려는 뷰의 ID입니다.
transaction.add(R.id.fragment_container, new YourFragment());
transaction.commit();

add() 메서드를 사용하면 해당 프래그먼트는 FragmentManager에 관리되기 시작합니다. 그러나 이 프래그먼트는 백 스택에 자동으로 추가되지 않습니다.
만약 프래그먼트 트랜잭션을 백 스택에 추가하려면 addToBackStack(null)을 호출해야 합니다. 이렇게 하면 해당 트랜잭션 (예: 프래그먼트 추가, 제거, 교체 등)이 백 스택에 저장되어, 사용자가 뒤로 버튼을 누르면 이전 트랜잭션 상태로 되돌아갈 수 있게 됩니다.

프래그먼트 제거

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();

transaction.remove(yourFragmentInstance);
transaction.commit();

프래그먼트 교체

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();

transaction.replace(R.id.fragment_container, new AnotherFragment());
transaction.commit();

백 스택에 프래그먼트 추가

transaction.addToBackStack(null);

백 스택에 쌓인 프래그먼트 중 특정 프래그먼트로 이동

백스택에 쌓인 프래그먼트는 기본적으로 LIFO (Last-In-First-Out) 방식으로 동작합니다. 이는 가장 최근에 추가된 프래그먼트부터 순차적으로 제거되는 방식입니다. 사용자가 Android의 뒤로 버튼을 누르면, FragmentManager는 백스택의 가장 최근 프래그먼트를 제거(pop)하게 됩니다.

그러나 직접적으로 중간에 있는 프래그먼트로 이동하거나 백스택에서 특정 위치의 프래그먼트를 선택하여 제거하는 기본 기능은 제공되지 않습니다.

하지만 여러 방법을 활용하면 원하는 위치의 프래그먼트로 돌아가거나 백스택을 조작할 수 있습니다

1.백스택에서 특정 프래그먼트까지 pop: FragmentManager의 popBackStack() 메소드를 활용하여 특정 이름의 프래그먼트가 나타날 때까지 백스택에서 프래그먼트를 제거할 수 있습니다. 이를 위해서는 프래그먼트 트랜잭션을 할 때 addToBackStack(String name)에 특정 이름을 지정해주어야 합니다.

fragmentManager.popBackStack("fragmentName", 0);

2.백스택에서 모든 프래그먼트 제거: 특정 상황에서 백스택의 모든 프래그먼트를 제거하고 싶을 때, 다음과 같이 수행할 수 있습니다

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

3.백스택의 상태를 확인
FragmentManager의 getBackStackEntryCount() 메소드를 사용하여 백스택에 몇 개의 프래그먼트가 쌓였는지 확인할 수 있습니다.

profile
자유롭게 쓴 나의 자유로운 Development voyage⛵

0개의 댓글