Android - 带有 ViewPager 的 MVVM

Android - MVVM with ViewPager

我正在尝试使用 MVVM 模式开发我的第一个项目。
我有两个片段:

  1. MyViewCollection(片段,其中包含可横向滚动片段的列表)。
  2. MyView(可横向滚动的片段)。

他们每个人都有 ViewModel,它使用数据绑定和实时数据。
我在 MyViewCollection 中有 'Watch later' 按钮,它必须将内容从 MyView 保存到 Room DB。

我是如何做到的。
我的视图(片段):

Data currentData;
...

viewViewModel.getData().observe(this, data -> {
currentData = data;
...
}  

我的视图集合(片段集合):

// on button clicked
viewCollectionViewModel.getIsDataToLoad().observe(this, aBoolean -> {

MyView fragment = (MyView) adapter.getFragmentActivity()
                    .getSupportFragmentManager()
                    .findFragmentByTag("f" + currentFragmentPos); // currentFramgentPos from onPageSelected (ViewPager2)

Data data = fragment.currentData;

// async task:
RepositoryDB.getRoomInstance().getDao().insertData(data);

}  

所以我有两个问题:

  1. 这是一个很好的做法,当'Views'在MVVM中'talk'互相? (如果不是 - 在像我这样的情况下如何避免这种情况?)。
  2. 我知道最佳做法是从 ViewModel 写入 Room,但 ViewModel 不能 'talk' 相互之间以及与 View 之间。那么我必须如何保留来自 'MyView' 的数据,以便将其从 'MyViewCollectionViewModel'(而不是来自 'MyViewViewModel')写入 Room?

最佳做法是在 MyView 中有两个视图模型。第二个视图模型是所有片段之间的共享视图模型,包括 MyViewCollection。你可以在那里存储数据并做你的员工。阅读更多关于 Shared ViewModels