Wafi_ck
Wafi_ck

Reputation: 1388

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?

Upvotes: 0

Views: 528

Answers (1)

georkost
georkost

Reputation: 618

Try making the val as backing field

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

Upvotes: 1

Related Questions