在 Activity 中更改 LiveData 不会通知子片段中的观察者

Changing LiveData in Activity doesn't notify observer in child Fragment

我正在尝试更新 activity 中托管片段的 LiveData 对象,然后我想在观察片段后更新片段的 UI。问题是片段的 ui 仅在片段重新启动时更新。 activity中的数据每次变化时,如何实现fragment中Ui的实时更新?

// Activity 代码:

   transactionViewModel = ViewModelProviders.of(this, providerFactory).get(TransactionViewModel.class);  
transactionViewModel.getUserValues();

/// 片段:

    transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class); 
viewModel.userValues.observe(getActivity(), userValues -> {  if(userValues.data != null){}//update the ui }

为了实现“Ui 的 real-time 更新”,我建议使用 data-binding

在您的代码中,我认为您正在观察 viewModel 的不同引用。

在投射 activity 后尝试观察(我在这里使用的是 kotlin):

        val myActivity = (requireActivity() as MainActivity)
        myActivity.transactionViewModel.viewModel.userValues.observe(getActivity(), userValues -> { 
        if(userValues.data != null){}//update the ui }

片段代码

transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class); 

viewModel.userValues.observe(getActivity(), userValues -> {  
   if(userValues.data != null) {
       //update the UI 
   }
}

应该是

transactionViewModel = ViewModelProviders.of(getActivity(), providerFactory).get(TransactionViewModel.class); 

// this goes in onViewCreated
viewModel.userValues.observe(viewLifecycleOwner, userValues -> {  
    if(userValues.data != null){
         //update the ui
    }
}