我刚刚开始在应用中使用Android的体系结构组件,并且在以下情况下有一个用例:
ViewModel
的{{1}}(来自LiveData
请求的观察者)Room
一样)并进行更新我尝试使用相同的LiveData
类,并以观察者的身份添加了片段和活动,以为从活动中进行更新会在返回片段时影响片段,但它不起作用。
这两个ViewModel
似乎是独立的。
从活动返回时如何强制刷新片段数据(例如,在ViewModel
中)?
还是可以在片段和活动之间共享相同的onActivityResult
? (尽管我怀疑,因为ViewModel
与观察者的生命周期相关联)
片段
ViewModel
活动
public void onAttach(@NonNull Context context) {
...
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
mViewModel.getData().observe(this, new Observer<List<Data>>() {
@Override
public void onChanged(List<Data> data) {
mAdapter.setData(data);
}
});
}
// in an onClick method
startActivity(intent); // go to the Activity
任何帮助将不胜感激!
编辑:
查看模型
protected void onCreate(Bundle savedInstanceState) {
...
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
mViewModel.getData().observe(this, new Observer<List<Data>>() {
@Override
public void onChanged(List<Data> data) {
mPagerAdapter.setData(data);
}
});
}
答案 0 :(得分:1)
我设法通过为viewmodel设置一个通用的生命周期所有者,并在不同的片段上使用相同的viewModel来获得所需的结果。 在我的片段中,我得到了这样的视图模型:
内部片段:
var userViewModel = activity?.run{ViewModelProviders.of(this, SharedUserViewModel.MainActivityViewModelFactory(applicationContext))[SharedUserViewModel::class.java]}
您看到我将活动用作“ ViewModelProviders.of”参数了吗? 这样,视图模型拥有相同的所有者,对我来说它可以正常工作。
答案 1 :(得分:0)
是的,您可以使用SharedViewModel在活动和片段之间共享ViewMode。