ViewModel은 같은 프래그먼트 끼리 동시에 사용하기 위해서는
private val sharedViewModel: MainSharedViewModel by lazy {
ViewModelProvider(requireActivity())[MainSharedViewModel::class.java]
}
이런 식으로 프래그먼트에서 액티비티를 불러와서 ViewModelStoreOwner로 지정해 주거나
private val sharedViewModel: MainSharedViewModel by activityViewModels()
위의 방법처럼 activityViewModels()를 사용하는 방법이 있습니다. 이러던 중 공유된 ViewModel의 라이브데이터를 observe를 하는 중 해당 프래그먼트가 켜져있지 않는 데에도 프래그먼트의 코드가 동작되는 경우가 생겼습니다.
ViewPager 같은 경우 옆에 있는 프래그먼트는 계속 살아 있기 때문에 sharedViewModel을 사용하여 라이브데이터를 observe를 하게 되면 바로바로 값들을 observe를 하게 됩니다.
반대로 frameLayout을 사용하여 프래그먼트를 바꿔주는 경우 다른 프래그먼트는 죽어있기 때문에 바꿔주더라도 바로바로 observe를 할 수 없습니다.
그렇다면 ViewPager를 사용하는 게 더 좋아 보입니다.
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/UI] BackGroundTint 값 Hex값으로 설정 (0) | 2023.10.16 |
---|---|
[Android/Kotlin] Room 외래키 적용 (1) | 2023.10.14 |
[Android/Kotlin] SharedPreferences (0) | 2023.09.14 |
[Android/Kotlin] DialogFragment 크기조절 (0) | 2023.09.13 |
[Android/Kotlin] 퍼미션(권한)허용 (0) | 2023.09.12 |