Fragment를 대충 알고 사용하는 경우가 많은데요.

이를 제대로 활용하려면, Fragment의 Transaction에 대해서

이해하고 있는 것이 좋습니다.

 

1. FragmentManager

Transaction을 이용하기 위해서는

FragmentManager를 사용해야 합니다.

호환성이 보장된 androidX의 라이브러리를 사용하기 때문에,

실제로는 supportFragmentManager이구요.

 

supportFragmentManager가 할 수 있는 일은 크게 3가지인데요.

  1.  기존의 액티비티에 존재하는 Fragment를 얻어오는(찾아오는) 일, id나 tag를 사용함
  2.  backstack에 쌓여있는 Fragment를 pop해 오는 것. (사용자가 back키를 누르는 것과 같음)
  3.  addOnBackStackChangedListener를 이용해서 backstack의 변화에 반응할 수 있도록 해 줍니다.

위에서 정리한 supportFragmentManager의 일중 

backstack에 쌓여있는 fragment를 pop해 오는 것은 매우 중요한데요.

왜 그런지 알아보겠습니다.

 

2. Fragment Transaction 수행하기

Fragment의 장점은 add, remove, replace가 자유롭게 가능하다는 점 입니다.

이것은 FragmentManger가 제공해주는 Transaction기능이 있기 때문에 가능한 것 인데요.

이러한 Transaction도 backstack에 쌓아놓았다가,

유저가 backKey를 누름에 따라서, 하나씩 뒤로 갈 수 있도록 할 수도 있습니다.

 

Transaction객체는 아래와 같이 얻어올 수 있는데요.

이렇게 얻은 transaction에 add(), remove(), and replace()를 해 준다음 commit()함수를 이용해주기만 하면 됩니다.

 

여기서 transaction을 backstack에 쌓아놓았다가  유저가 back키를 누르면 뒤로 가면서 볼 수 있도록 하려면,

addToBackStack()함수를 이용해 주면 됩니다.

간단히 addToBackStack 코드를 보고 가겠습니다.

인자로 string값을 주어서 이름을 부여할 수도 있고, 그냥 null값을 넣어주어도 되는데요.

중요한 것은, 이 함수를 실행하면, 해당 transaction은 backstack에 추가되고,

유저가 back key를 눌러서  onBackPressed()가 호출되면, backstack에 추가된 순서대로 나올 수 있다는 사실입니다.

 

위와 같이 addToBackStack함수를 사용하지 않으면,

한번 destroy되었던 fragment로 다시 돌아갈 수 없게 됩니다.

 

실제로 코드로 구현해 보면 다음과 같습니다.

 

 

popBackStack

이 함수는 백스택에 있던 프레그먼트를 pop해서 나오게 하는 것인데요.

 

 

 

728x90

+ Recent posts