Search code examples
androidkotlinandroid-lifecycleandroid-livedatamutablelivedata

How to observe data from live data android on Three different Fragment


I have my Activity MainActivity.kt .

And and one ViewModel MainActivityViewModel.kt

And I want to observe my live data to my 3 different fragments.

class MainActivity{
      
      lateinit var mainActivityViewModel: MainActivityViewModel
      ...

     mainActivityViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainActivityViewModel::class.java)
}

class MainFragmentOne{
      
      lateinit var mainActivityViewModel: MainActivityViewModel
      ...

     mainActivityViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainActivityViewModel::class.java)
}

But my observer only work on activity not on the fragments.


Solution

  • Hey there you are doing everything greate except one thing you should use requireActivity() instead on this in your fragment class.

    Make sure your all fragment are attached to your viewModel holding Activity.

    class MainActivity{
    
          lateinit var mainActivityViewModel: MainActivityViewModel
          ...
    
         mainActivityViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainActivityViewModel::class.java)
    }
    
    class MainFragmentOne{
    
          lateinit var mainActivityViewModel: MainActivityViewModel
          ...
    
         mainActivityViewModel = ViewModelProviders.of(requireActivity(), viewModelFactory).get(MainActivityViewModel::class.java)
    }
    

    This will help you solve your issue.

    For further detail view this.