private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
- 첫 생성시 ? 연산자를 통해 null 값을 넣어줄 수 있도록 해준다(onDestroy에서 null처리 해줄 수 있게 하기 위해)
- onCreateView 에서 생성된 _binding 객체에 inflate 해준 뒤, .root 를 이용해 root 레퍼런스를 가져온다.
- 후에 return을 통해 활성 뷰를 만들어준다.
- 사용이 끝났을 때 onDestroyView 에서 _binding 객체에 null 처리를 해준다.
먼저 액티비티에 따른 프래그먼트의 생명주기를 보면
프래그먼트가 액티비티의 생명주기보다 오래 지속되는 볼 수 있다. 만약 backstack 또는 detach를 사용한다면, fragment view는 파괴되지만 fragment는 여전히 살아있게 된다. 이로 인해 불필요한 메모리 누수가 생길 수 있기 때문에 onDestroyView() 에서 null값처리를 통해 데이터 누수를 방지해준다.
출처 : https://ifcontinue.tistory.com/14 ,
https://yoon-dailylife.tistory.com/57 ,
https://developer.android.com/topic/libraries/view-binding#fragments