我们有一个设置,我们使用BaseObservable
ViewModel
设置为通过xml在数据绑定层上的变量。
我们的情况是Fragment
显示项目列表。此片段会启动Activity
trough startActivityForResult
来编辑此列表。返回时,我们更新ViewModel
中的onResume
(这有效),但不会触发数据绑定内部回调。我们在xml中设置的绑定(类似于@{viewModel.isLoading}
)不再被执行,即使调用了notifyPropertyChanged
。
在调试时,我们发现绑定对象在离开片段之前包含了WeakReference$OnPropertyChangedCallback
的广泛列表,这些是数据绑定框架使用的内部回调。回到碎片后,这些都被处理掉了,这是有道理的,因为它们是一个弱引用。
这应该发生吗?如果是这样,我如何确保回调被反弹到我的绑定对象?
供参考一个小的伪代码样本:
在片段onCreate
中:
mViewModel = ViewModelProviders.of(getActivity()).get(TGMyNewsViewModel.class);
在片段onCreateView
中:
mBinding = FragmentMyNewsBinding.inflate(inflater, container, false);
mBinding.setViewModel(mViewModel);
在onActivityResult
中,当我们确认某些内容发生了变化时:
mViewModel.startViewModel();
这会触发重新加载,此重新加载正在成功完成。
然后,ViewModel中的属性更改不会更新实际布局。