728x90
액티비티 위에 프래그먼트가 띄워져있는 상황에서 뷰모델을 공유할 상황이 생긴다.
기존의 viewmodel을 생성할때
private val searchViewModel: SearchViewModel by viewModels()
이렇게 생성했다. 하지만 이렇게 생성하게 되면 fragment에 종속된다.
다른 fragment와 공유하고 싶다면 viewmodels()대신
private val searchViewModel: SearchViewModel by activityViewModels()
이렇게 설정해햐 한다. 이 경우 프래그먼트들의 부모가 되는 액티비티의 뷰모델을 공유하게 됨으로
한 액티비티에서 파생된 프래그먼트들 끼리는 뷰모델을 공유할수 있고 데이터를 공유하게 된다.
activityViewModels()의 문제점은 activity가 죽기전까지 viewModel이 계속해서 살아있다는 점이다.
만약 액티비티에 구속되지 않고 프래그먼트들끼리 뷰모델을 공유하고싶다면 다음과 같은 방법이 있다.
private val viewModel: ManageLocationViewModel by viewModels({requireParentFragment()})
viewModels를 선언할 때 requireParentFragment를 기준으로 하는 것이다. 액티비티를 기준으로 잡는것과 비슷하지만 이것은 parentfragment가 죽을때 죽음으로써 액티비티에 비해 좀더 완화되었다고 말할 수 있겠다.
'안드로이드 코틀린' 카테고리의 다른 글
[Java][Android] circle-menu 만들기 (0) | 2022.06.12 |
---|---|
[Kotlin][Android] 오늘 요일 알아오기 (0) | 2022.06.11 |
[Kotlin][Android] 도움말 (0) | 2022.06.07 |
[Kotlin][Android] 2개의 배열 하나로 합치기 (0) | 2022.06.03 |
[Kotlin][Android] fragment navigation 라이브러리 (0) | 2022.05.31 |