Fragment는 JetPack에서 제공하는 라이브러리중 하나로 사용 빈도가 높은 라이브러리 중 하나이다.
Fragment는 TextView나 Button 처럼 Activity를 구성하는 View이다. 하지만 Fragment 그 자체만으로는 화면에 아무것도 출력되지 않는다.
Fragment는 Activity처럼 동작하며 Activity 내에서 UI의 일부를 나타낸다.

Fragment는 태블릿처럼 화면이 넓은 기기에서 동작하는 앱을 편리하게 개발하기 위해 제공되었다.
한 화면은 하나의 Activity 클래스에서 작성해야하는데 화면이 커지게 되면 Activity 클래스에 너무 많은 코드를 작성해야한다는 문제점이 있었다.
따라서 여러 개의 Fragment를 하나의 Activity에 조합하여 창이 여러 개인 UI를 구축할 수 있으며, 하나의 Fragment를 여러 Activity에서 재사용할 수 있도록 하여 이러한 문제를 해결하였다.
그러므로 Fragment의 사용 목적은 다음과 같이 정리할 수 있다.
BackStack : Activity가 열린 순서대로 쌓인 스택을 다시 되돌아 가는 것

프래그먼트가 액티비티에 attach 될 때 호출된다. 호출되면서 인자로 Context가 있는대 이 Context를 가지고 부모 액티비티에 listener interface를 implement했다면 형변환을 통해 가져올 수 있다.
시스템은 프래그먼트를 생성할때 onCreate()를 호출한다. 구현 내에서 프래그먼트의 기본 요소 중 프래그먼트가 일시정지되거나 중단되었다가 재개되었을 때 유지하고자 하는 것을 초기화해야 한다.
시스템은 프래그먼트가 자신의 UI를 처음으로 그릴 시간이 되면 호출한다. 프래그먼트에 맞는 UI를 그리려면 메서드에서 View를 리턴해야 한다. 이 메서드는 프래그먼트 레이아웃의 루트이다. 프래그먼트가 UI를 제공하지 않는 경우 null을 반환하면 된다.
액티비티에서 프래그먼트를 모두 생성하고 난 다음 호출된다. 액티비티의 onCreate()에서 setContentView()한 다음과 유사하다. 이후에 UI 변경 작업이 가능하다.
액티비티에서의 역할과 비슷하다. 유저에게 프래그먼트가 보이도록 하는 역할이다.
프래그먼트가 비로소 화면에 보여지는 단계, 사용자에게 포커스를 잡은 상태. 사용자와의 상호작용이 가능하다.
시스템이 이 메서드를 호출하는 것은 사용자가 프래그먼트를 떠난다는 첫 번째 신호이다.(프래그먼트가 소멸 중이라는 뜻은 아니다). 현재 사용자가 세션을 넘어서 지속되어야 하는 변경 사항을 적용하려면 이곳에서 해야 한다.
프래그먼트는 더이상 보여지지 않게되며, 프래그먼트는 기능을 할 수 없다.
프래그먼트에 View들을 제거한다. 만약 add 할 때 backstack 을 사용했다면, 다시 해당 프래그먼트로 돌아 올때 onCreateView() 가 호출된다.
프래그먼트를 제거하기 직전에 호출된다.
프래그먼트 제거를 완료하고 액티비티와의 연결도 해제 시킨다.
Fragment는 Fragment를 상속받아 작성하는 클래스이다.
이때 Frgament 클래스에 최소한으로 작성해야 하는 함수는 onCreateView()이다. 이 함수가 자동으로 호출되며 반환한 View 객체가 화면에 출력되게 된다.
import androidx.fragment.app.Fragment
class OneFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_one, container, false)
}
}
Activity내에서 Fragment는 두가지 방식으로 출력될 수 있다.