: 위 그림과 같이 장소 검색을 한후 전에 입력했던 값들이 유지 되어야 한다 !
: Fragment 가 두 개의 ViewModel을 알고 있어야하고, Activity 가 살아있는 동안 activityViewModel이 계속 살아있다는 단점이 있다.
: 현재 Fragment의 값도 저장할 것이 많은데 다른 Fragment 까지 저장하게 된다면 OverFlow가 생길 수도 있음(탈락)
: 일반 Text 값이라면 고정되어 있기때문에 사용할 수도 있겠지만 계속 변화하는 EditText 값을 계속 변경 시켜주기가 비효율 적이라고 판다.
: Navigation Action을 통해 장소 검색 Fragment로 이동해도 이전 Fragment 가 사라지지 않고 BackStack에 Pause 상태로 저장된다는 사실을 알게 되었다. 그래서 BackStack을 잘 활용하면 EditText 등 데이터를 관리하지 않고 유지시킬 수 있지 않을까 생각하게 되었다.
구현내용
Send
// BackStack 할 떄, 값 보내기
findNavController().apply {
// 이전으로 BackStack할때 값을 저장할 수 있는 함수 (주소 값과 위치 값을 저장)
previousBackStackEntry?.savedStateHandle?.set(ADDRESS_KEY, address)
previousBackStackEntry?.savedStateHandle?.set(LATLNG_KEY, markerState?.position)
popBackStack()
}
receive
// 저장된 값 받기
findNavController().currentBackStackEntry
?.savedStateHandle?.apply {
//LiveData를 Observing 하면서 값 변경 시 받아오기
getLiveData<String>(ADDRESS_KEY).observe(viewLifecycleOwner) {
newChatViewModel.setAddress(it)
}
getLiveData<LatLng>(LATLNG_KEY).observe(viewLifecycleOwner) {
newChatViewModel.setLatLng(it)
}
}