안드로이드/이론

[ 안드로이드 ] Livedata Observer 등록하자 마자 호출되는 경우 or 중복 호출

dongx._.2 2022. 11. 14. 00:34

안드로이드의 Livedata에 Observer를 걸어 사용하던 중 Observer를 등록하자마자 호출이 되어 코드가 실행되는 경우가 있었다.

 

https://stackoverflow.com/questions/50236778/why-livedata-observer-is-being-triggered-twice-for-a-newly-attached-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로 바꿔 준 뒤에는 잘 동작한다.