Fragment에서의 ViewBinding null 처리

안석주·2021년 7월 12일
3

Android

목록 보기
5/8

ViewBinding을 fragment에서 사용하는 방법을 보자

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
}

구글에서 제시한 Fragment 에서 viewbinding을 사용하는 방법이다.

  • 첫 생성시 ? 연산자를 통해 null 값을 넣어줄 수 있도록 해준다(onDestroy에서 null처리 해줄 수 있게 하기 위해)
  • onCreateView 에서 생성된 _binding 객체에 inflate 해준 뒤, .root 를 이용해 root 레퍼런스를 가져온다.
  • 후에 return을 통해 활성 뷰를 만들어준다.
  • 사용이 끝났을 때 onDestroyView 에서 _binding 객체에 null 처리를 해준다.

왜 마지막에 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

profile
뜻을 알고 코딩하기

0개의 댓글