안드로이드의 Livedata에 Observer를 걸어 사용하던 중 Observer를 등록하자마자 호출이 되어 코드가 실행되는 경우가 있었다.
ViewModel 객체 생성시 owner를 requireActivity()로 생성한 것이 문제였다.
수정 전
reportVM = ViewModelProvider(requireActivity())[ReportViewModel::class.java]
수정 후
reportVM = ViewModelProvider(this)[ReportViewModel::class.java]
기존에 다른 Fragment에서도 requireActivity()를 써왔었는데 문제가 되지 않았던 이유는 MainActivity() 안에서 생성되고 관리 되던 Fragment 였기 때문인 것 같다.
MainActivity 내에서 BottomNavigationBar를 통해 show, hide 되기 때문이 아닌가 싶다.
문제가 되었던 것은 Fragment에서 Fragment를 생성할 때였다.
Owner를 this로 바꿔 준 뒤에는 잘 동작한다.
'안드로이드 > 이론' 카테고리의 다른 글
[ 안드로이드 ] 해상도 대응, 다양한 화면 크기 지원 (0) | 2023.01.31 |
---|---|
[ 안드로이드 ] local.properties를 이용하여 API Key 안전하게 보관하기 (0) | 2023.01.25 |
[ 안드로이드 ] Fragment Add시 밑의 Fragment 클릭되는 문제 (0) | 2022.11.16 |
[ 안드로이드 ] BottomSheetDialog에서 Fragment로 값 전달 (0) | 2022.10.03 |
[ 안드로이드 ] 외부 라이브러리 커스텀하기 (0) | 2022.09.26 |