在片段和活动之间更新视图模型



我刚刚开始在我的应用程序中使用 Android 的架构组件,我有一个用例:

  • 片段是ViewModelLiveData的观察者(来自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);
}
});
}

任何帮助将不胜感激!

编辑:

查看模型

public class MyViewModel extends AndroidViewModel {
private Dao dao;
private ExecutorService executorService;
public MyViewModel (@NonNull Application application) {
super(application);
dao = AppDatabase.getInstance(application).getDao();
executorService = Executors.newSingleThreadExecutor();
}
public LiveData<Data> getData() {
return dao.getAllData();
}
// other methods to update and delete with executorService
}

我设法通过为视图模型设置一个通用的生命周期所有者,并在不同的片段上使用相同的视图模型来获得您想要的结果。 在我的片段中,我得到这样的视图模型:

内部片段:

var userViewModel = activity?.run{ViewModelProviders.of(this, SharedUserViewModel.MainActivityViewModelFactory(applicationContext))[SharedUserViewModel::class.java]}

您是否看到我使用该活动作为"ViewModelProviders.of"参数? 这样,视图模型具有相同的所有者,它对我来说工作正常。

是的,您可以使用 SharedViewModel 在活动和片段之间共享视图模式。

相关内容

  • 没有找到相关文章

最新更新