프래그먼트는 액티비티화면을 구성하는 뷰이며 자체만으로는 화면에 아무것도 출력되지 않는다.
액티비티처럼 동작하므로 액티비티에 작성할 수 있는 모든 코드는 프래그먼트에 사용할 수 있다.
태블릿과 같은 넓은 화면에 여러 화면으로 분할하여 넣기위해서 개발되었다.(ex. 화면 왼쪽 목록에서 클릭하면 화면 오른쪽에 상세 내용이 뜸)
하나의 액티비티에서 여러개의 프래그먼트를 작성하여 화면 전환을 할 수 있다.(ex. 뷰페이저, 탭 전환)
build.gradle 파일에 androidx.fragment를 추가하여 사용한다.
dependencies {
...
implementation 'androidx.fragment:fragment-ktx:1.5.4'
}
class OneFragment : Fragment(){
lateinit var binding: FragmentOneBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentOneBinding.inflate(inflater, container,false)
return binding.root
}
}
<fragment
android:name="com.example.doitkotlin3.OneFragment"
android:id="@+id/fragmentView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_content"
android:orientation="vertical">
</androidx.appcompat.widget.LinearLayoutCompat>
val fragmentManager : androidx.fragment.app.FragmentManager = supportFragmentManager
val transaction : androidx.fragment.app.FragmentTransaction = fragmentManager.beginTransaction()
val fragment = OneFragment()
transaction.add(R.id.fragment_content, fragment)
transaction.commit()
(출처 - https://limkydev.tistory.com/41)
액티비티 생명주기 참고용
(출처 - https://latte-is-horse.tistory.com/274)
프래그먼트의 생명주기는 크게 Initialized(초기화), Created(생성), Started(시작), Resumed(재개), Destroyed(소멸) 5단계로 구분된다.
초기화단계에서는 onAttach(), onCreate() 가 호출되면서 프래그먼트 초기화 로직을 수행한다. 이때는 프래그먼트를 구성하는 뷰 객체를 이용하지 못한다.
생성단계에서 onCreatedView() 가 호출되면서 LayoutInflater 객체가 넘어가므로 프래그먼트 내부를 구성하는 뷰 객체가 준비된다.
백스택(back stack)
transaction.addToBackStack(null)