Reputation: 31
I'm trying to update LiveData object in activity that hosts a fragment and then I want to update the fragment's UI after observing it. The problem is the fragment's ui only updates when fragment is restarted. What can I do to achievie real-time update of Ui in fragment every time the data changes in activity?
// Activity code:
transactionViewModel = ViewModelProviders.of(this, providerFactory).get(TransactionViewModel.class);
transactionViewModel.getUserValues();
/// Fragment:
transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class);
viewModel.userValues.observe(getActivity(), userValues -> { if(userValues.data != null){}//update the ui }
Upvotes: 1
Views: 658
Reputation: 81529
Fragment code
transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class); viewModel.userValues.observe(getActivity(), userValues -> { if(userValues.data != null) { //update the UI } }
Should be
transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class);
// this goes in onViewCreated
viewModel.userValues.observe(viewLifecycleOwner, userValues -> {
if(userValues.data != null){
//update the ui
}
}
Upvotes: 0
Reputation: 530
To achievie "real-time update of Ui" i sugesst using data-binding.
In your code, I think you are observing a deferent reference of viewModel.
Try observing after casting your activity(am using kotlin here):
val myActivity = (requireActivity() as MainActivity)
myActivity.transactionViewModel.viewModel.userValues.observe(getActivity(), userValues -> {
if(userValues.data != null){}//update the ui }
Upvotes: 1