Search code examples
androidkotlinandroid-fragmentsmvvmandroid-viewmodel

How to pass data between fragments using ViewModel(s)?


I use Koin and Fragment + ViewModel per screen. In my HomeFragment I have list with post. When user selects post I navigate user to PosDetailsFragment and I want to display info about post.

class HomeFragment : Fragment() {
               private val homeViewModel by viewModel<HomeViewModel>()

               //when user select post I set that value to LeadViewModel (I want to make that viewModel as common for some fragment)
               leadViewModel.state.selectedPost.value = action.post
}


class PostDetailsFragment : Fragment() {
        private val leadViewModel by sharedViewModel<LeadViewModel>()
    
        //always null
        val post = leadViewModel.state.selectedPost.value
}

My Koin module:

    viewModel { LeadViewModel() }
    viewModel { HomeViewModel(get(bottomNavigationCommander), get()) }
    viewModel { AddPostViewModel() }

What is wrong? It looks like instance of LeadViewModel in PostDetailsFragment is completely different than in HomeFragment?


Solution

  • Try making the val as backing field

            val post
              get() = leadViewModel.state.selectedPost.value