안드로이드/이론
[ 안드로이드 ] Livedata Observer 등록하자 마자 호출되는 경우 or 중복 호출
dongx._.2
2022. 11. 14. 00:34
안드로이드의 Livedata에 Observer를 걸어 사용하던 중 Observer를 등록하자마자 호출이 되어 코드가 실행되는 경우가 있었다.
Why LiveData observer is being triggered twice for a newly attached observer
My understanding on LiveData is that, it will trigger observer on the current state change of data, and not a series of history state change of data. Currently, I have a MainFragment, which perfor...
stackoverflow.com
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로 바꿔 준 뒤에는 잘 동작한다.