오늘은 프래그먼트의 생명주기에 대해서 공부를 해보자
프래그먼트의 생명주기 메서드들은 각 단계에서 특정 작업을 수행하기 위해 오버라이드할 수 있으며, 액티비티와 함께 조합하여 프래그먼트의 동작을 컨트롤한다. 프래그먼트가 액티비티와 함께 사용될 때 이러한 생명주기 메서드를 적절하게 구현하여 화면 전환이나 상태 변화에 따른 작업을 처리할 수 있다.
다음으로 간단한 예제를 만들어서 Fragment에 lifecycle을 확인해보자
MainActivity.kt
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.apply {
fragment1Btn.setOnClickListener {
setFragment(FirstFragment())
}
fragment2Btn.setOnClickListener {
setFragment(SecondFragment())
}
}
setFragment(FirstFragment())
}
private fun setFragment(frag: Fragment) {
supportFragmentManager.commit {
replace(R.id.frameLayout, frag)
setReorderingAllowed(true)
addToBackStack("")
}
}
}
SecondFragment.kr
class SecondFragment : Fragment() {
// Fragment가 생성될 때 호출
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate")
}
// 프래그먼트의 뷰를 생성하고 초기화할 때 호출
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 레이아웃 XML 파일을 인플레이트하여 뷰를 생성
return inflater.inflate(R.layout.fragment_second, container, false)
}
// onCreateView 이후에 호출. UI 요소 초기화 등을 수행할 수 있다.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
// Fragment가 화면에 표시될 때 호출
override fun onStart() {
super.onStart()
Log.d(TAG, "onStart")
}
// Fragment가 사용자와 상호작용 가능한 상태가 될 때 호출
override fun onResume() {
super.onResume()
Log.d(TAG, "onResume")
}
// Fragment가 다른 액티비티나 Fragment로 전환되기 전에 호출
override fun onPause() {
super.onPause()
Log.d(TAG, "onPause")
}
// Fragment가 화면에서 사라질 때 호출
override fun onStop() {
super.onStop()
// Fragment가 화면에서 사라질 때 호출
Log.d(TAG, "onStop")
}
// onCreateView에서 반환한 뷰와 관련된 리소스를 해제할 때 호출
override fun onDestroyView() {
super.onDestroyView()
// Fragment가 더 이상 사용되지 않을 때 호출
Log.d(TAG, "onDestroy")
}
// Fragment가 더 이상 사용되지 않을 때 호출
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroyView")
}
// Fragment가 완전히 소멸될 때 호출
override fun onDetach() {
super.onDetach()
Log.d(TAG, "onDetach")
}
companion object {
private const val TAG = "FragmentLifeCycle"
}
}
오 제 후발대 과제보다 훨씬 낫네요 ㅎㅎ