Foundation/Android

[Android] Fragment Manager에서 replace()와 add()의 차이점

개발왕 금골드 2022. 2. 24. 10:35
반응형

안녕하세요 골드입니다.

오늘은 Fragment에서 사용하는 함수 add()와 replace()에 대해 글을 작성하겠습니다. 면접에서 이 부분을 애매하게 알면서 대답을 못했습니다.

 

간단하게 알고 있었던 부분은 add() 단순 추가, replace()는 기존 fragment를 remove()하고 새롭게 호출된 fragment로 대체한다는 점이었다. 이미지로 보면 이렇다.

add()는 기존 fragment 위에 덮어 쓰이고 기존 fragment에 대한 다른 함수 호출을 하지 않기 때문에 단순히 fragment가 onAttach() - onResume()까지 호출되면서 쌓이게 된다.

  • Fragment A : onAttach() - onResume() : Fragment B 밑에서 실행중
  • Fragment B : onAttach() - onResume() : 사용자와 상호작용

 

반면, replace()는 기존 fragment를 remove() 하기 때문에 onDetach()까지 호출된다.

  • Fragment A : onAttach() - onDetach() : replace(Fragment B)를 호출하면서 onDetach() 호출
  • Fragment B : onAttach() - onResume() : 사용자와 상호작용

 

참고로, addToBackStack()을 사용했을 경우 replace()를 호출하여 기존 fragment에 대한 remove()가 호출되어도 onDetach()까지 호출되지 않고 onDestroyView()까지 호출된다. 간단하게 이야기하면 addToBackStack()으로 인해 fragment가 중단되느냐 아니면 소멸되느냐의 차이라고 한다. addToBackStack()을 호출하여 백 스택에 fragment를 추가하였기 때문에 기존 fragment는 remove()가 호출되었지만 소멸되지 않고 중단된 상태에 머무르는데, 사용자가 백 버튼을 클릭했을 때 다시 onCreateView()가 호출되면서 상호작용할 수 있는 상태가 된다.

  • add Fragment A, addToBackStack() : onAttach() - onDestroyView() : 일시중지
  • replace Fragment B : onAttach() - onResume() : 사용자와 상호작용
  • 사용자가 뒤로 가기 버튼 클릭 : Fragment B - onDetach() 호출 : 제거
  • Fragment A : onCreateView() - onResume() : 사용자와 상호작용

 

여기까지 골드였습니다.

감사합니다.

 

 

참고자료 : https://zzandoli.tistory.com/55

 

[안드로이드 Q&A] 프래그먼트에서 add()와 replace()의 차이점이 무엇일까?

프래그먼트를 주로 사용하면서 add()와 replace()가 과연 어떤 점이 차이점이 있는지 항상 궁금했다. 그래서 각 역할에 대해서 알아보고, 차이점을 정리해보기로 했다. replace()는 아래와 같이 사용된

zzandoli.tistory.com

 

반응형