fragment 등장 배경
액티비티 내에 배치되어 사용자 인터페이스를 구성하는 안드로이드 구성요소 중 하나입니다.
이 개념이 나온 이유는 안드로이드가 여러 디바이스 (예 : 태블릿) 을 지원하면서 다양한 기기의 화면에 대응할 필요가 있어졌기 때문입니다.
Fragment는 Activity 안에서 화면의 일부를 구성하는 것이라고 할 수 있다. (사실 Fragment는 또다른 Fragment 내에서도 생성될 수 있다. 상단에는 Activity와의 비교 설명을 위해 Activity 만 표기하였다.)
Fragment는 Activity나 다른 Fragment에 의해 호스팅되어야하며, 독립적으로 화면 구성이 가능하고 자체적인 입력 이벤트를 처리할 수 있다.
아래 공식 안드로이드 개발 URL 에서 프래그먼트를 자세하게 다루고 있습니다.
https://developer.android.com/guide/components/fragments?hl=ko
Fragment 특징
이미 언급했듯이, Fragment는 Activity나 다른 Fragment에 의해 호스팅되어야 한다. 좀 더 풀어서 이야기하면 Fragment는 독자적인 layout xml을 가질 수 있지만, 이 Fragment ‘객체’가 생기고 그려지는 것은 어떤 Activity 혹은 다른 Fragment 내에서 이루어지는 것이다. 이 때 Fragment는 Activity 혹은 다른 Fragment에 의해 호스팅되었다고 하며, Fragment를 갖고 있는 Activity나 다른 Fragment를 호스트 Activity 혹은 호스트 Fragment라고 한다. Fragment는 호스트 Activity나 Fragment의 뷰 계층에 속하게 된다.

onAttach()
→ Fragment가 Activity에 attach 될 때 호출되는 함수.
호출되면서 인자인 Context를 가지고 부모 Activity에 listener interface를 implement했다면 형변환을 통해 가져올 수 있다.
onCreate()
→ Fragment를 생성할때 onCreate()를 호출한다.
초기화 해야하는 리소스들은 여기서 초기화! + 넘겨준 값들이 있다면 여기서 변수를 넣어주면 됨. 하지만 UI 초기화는 불가.
onCreateView()
→ 레이아웃을 inflate하는 곳. Fragment에 맞는 UI를 그리려면 메서드에서 View를 리턴해야 한다. (여기서 View 객체를 얻을 수 있음.)
Fragment가 UI를 제공하지 않는 경우 null을 반환하면 된다.
onActivityCreated()
→ Activity에서 Fragment를 모두 생성하고 난 다음 호출되는 함수.
Activity의 onCreate()에서 setContentView()한 다음과 유사하다. View(UI)변경 작업이 가능.
onStart()
→ Activity에서의 역할과 비슷하다. 유저에게 Fragment가 보이도록 하는 역할이다. (Activity는 started 상태)
onResume()
→ Fragment가 화면에 보여지는 단계, 사용자에게 포커스를 잡은 상태. 사용자와의 상호작용이 가능하다.
다른 Fragment가 추가되는 경우
onPause()
→ Fragment의 부모 Activity가 아닌 다른 Activity가 foreground로 나올 때, onPause를 call하고 backstack으로 들어감. (이 메서드를 호출하는 것은 사용자가 Fragment를 떠난다는 첫 번째 신호. Fragment가 소멸 중이라는 뜻은 아님).
현재 사용자가 세션을 넘어서 지속되어야 하는 변경 사항을 적용하려면 이곳에서 해야 한다.
onStop()
→ Fragment는 더이상 보이지 않고, 기능도 할 수 없다.
onDestroyView()
→ Fragment에 View들을 제거할 때 호출되는 함수. 만약 add 할 때 backstack 을 사용했다면, 다시 해당 Fragment로 돌아 올때 onCreateView() 가 호출된다.
onDestroy()
→ fragment를 제거하기 직전에 호출된다.
onDetach()
→ Activity 제거를 완료하고 Activity와의 연결도 해제시킨다.
어떤 Fragment의 객체는 Activity나 다른 Fragment에 의해 호스팅되지만, 이 말이 하나의 Activity나 Fragment에서만 생성할 수 있다는 것은 아니다. 한 Fragment의 객체는 다수의 Activity에서 생성할 수 있다.
[Android] 안드로이드 프래그먼트 사용방법과 생명주기
[Android] Fragment란?
프래그먼트(Fragment)란?