Sharing ViewModel in ViewPager using parent fragment as owner

Viewed 180

I have a parent Fragment A with Fragment B and Fragment C inside a ViewPager. I want to share Fragment's A ViewModel within Fragment B and Fragment C.

This was my approach which seemed intuitive at first:

In parent Fragment A which contains ViewPager, I create my viewModel like this:

val viewModel by viewModels<SharedViewModel>()

...

@HiltViewModel
class SharedViewModel @Inject constructor(
    stateHandle: SavedStateHandle
) {

   val myArgument = stateHandle.get<Boolean>("myArgument")
   ...

 }

My ViewPager Fragment's B and C are trying to access same SharedViewModel instance like this:

   private val sharedViewModel by viewModels<SharedViewModel>(
        ownerProducer = { requireParentFragment() }
    )

Everything works fine, except when the process is destroyed, my savedStateHandle in the SharedViewModel does not retain arguments passed by navigation component. Doing this in SharedViewModel returns null and savedStateHandle is empty.

val myArgument = stateHandle.get<Boolean>("myArgument")

Does someone know why is this happening? Using activityViewModels seems to fix this, but I do not fully understand why.

0 Answers
Related