본문 바로가기

TIL

[TIL] Fragment에서 ViewBinding 사용하기

[오늘 배운 내용]

-1- Fragment에 ViewBinding 적용하기

  • 이전에 ViewBinding을 배운 이후로는 모든 Activity에서 ViewBinding을 적용해서 학습을 진행하던 중에 Fragment에서는 ViewBinding을 onCreateView에서 적용하고, 기존에 Activity에서 적용하는 방법과는 조금 다른 방법으로 ViewBinding 을 적용해 보았는데, 왜 다른 방법으로 적용시키는 지 궁금해서 찾아보았다.
  • Android Developer Docs 에서 권장하는 Fragment 에서의 ViewBinding 적용 코드이다. 

  • 위처럼 코드를 작성하는 이유는 Fragment에서 ViewBinding을 사용할 경우 Fragment는 View보다 오래 지속되어 Fragment의 Lifecycle로 인해 메모리 누수가 발생할 수 있기 때문이다.
  • BottomNavigation과 같은 Navigation component, BackStack or detach를 사용하는 경우 onDestroyView()가 호출되어지고 onDestroy() 는 호출되지 않는다. 즉 1번 Fragment 객체가 완전 종료되지 않고 view만 종료된 상태라는 것이다.
  • 해당 현상으로 인해서 onDstroyView가 호출되면, binding변수를 null로 만들어주어서 메모리 누수를 막아주어야 한다.

 

 

onCreateView에서 적용하는 이유

  • 기존에 Acitivity에 ViewBinding을 적용하고, xml 뷰를 화면에 띄우는 방법은 Activity Class내부의 onCreate에서 적용하고 setContentView로 설정했는데, Fragment에서는 viewBinding의 적용 및 뷰를 화면에 띄우려면 onCreateView() 메소드내에서 적용 해주어야 한다.
  • Fragment의 onCreateView에서 적용해야하는 이유
    • Activity의 생명주기 메서드 중에는 onCreateView가 없다. 왜냐하면 Activity는 화면 전체를 관리하는 컨테이너 역할을 하기 때문에 setContentView() 메서드를 통해 한번에 설정이 된다. 이로 인해 Activity의 UI 구성 요소들은 주로 xml 레이아웃 파일을 사용하여 정적으로 생성하거나, 필요한 경우 코드에서 동적으로 추가.
    • Fragment의 경우 Fragment는 재사용이 가능한 UI 구성 요소로 하나의 Activity 내에서 여러 개의 Fragment의 조합으로 모듈화된 UI를 만들 수 있지만 Fragment 자체로는 화면 전체를 관리하는 컨테이너 역할을 할 수 없고, 화면 영역을 가지고 해당 영역 내에서 독립적인 UI를 구성하는 역할을 하기 때문이다.
    • Fragment의 onCreateView는 Fragment가 처음 생성되거나 재사용될 때 호출되어 해당 Fragment의 View 계층구조를 inflate(xml에 표기된 레이아웃들을 메모리에 객체화 시키는 행동)하여 View를 반환

 

 


 

[오늘 복습한 내용]

1. 본문 내용 기록용이라 다음날짜로 몰아서 작성됨

 

 

 


[오류,에러 등등]

1. 다음날짜로 이동

 


[느낀 점]

1. 다음날짜로 이동

 

 

 


[Reference]

 

 

// Fragment Lifecycle

https://wooooooak.github.io/android/2019/08/05/fragment%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0%EC%99%80%EA%B0%9D%EC%B2%B4%ED%8C%8C%EA%B4%B4%EC%8B%9C%EC%A0%90/
// Fragment ViewBinding

https://wooooooak.github.io/android/2019/08/05/fragment%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0%EC%99%80%EA%B0%9D%EC%B2%B4%ED%8C%8C%EA%B4%B4%EC%8B%9C%EC%A0%90/

https://yoon-dailylife.tistory.com/57

https://gift123.tistory.com/58