我正在使用 MVP 构建 Android 应用程序。 其中一个屏幕以一种主/详细 View (嵌入播放器的内容页面)显示数据:
顶部是播放器( fragment ),下面是内容信息(带有 fragment 的viewpager),用户可以在页面(ViewPager)之间滑动来切换内容。当Viewpager位置发生变化时,播放器也会相应更新并开始播放当前内容。
演示者请求的数据来自存储库,具有本地(数据库)/远程(Rest API)数据源。
如何充分利用 MVP 以避免多次请求相同的数据?
我的 Activity 中是否应该只有一个 Presenter,并在某处保留/缓存内容信息信息请求的数据,以便在位置更改时将其传回播放器?
还是为每个 ContentInfo 提供一个演示者,请求自己的数据,为播放器提供一个演示者,在调用 play() 方法时再次请求相同的数据?
我找到了this相关主题,但它并不真正适合我的情况,因为在内容信息 fragment 中请求数据的同时,播放器中的数据没有更新(我正在通过 ViewPager 获取 fragment 的 onCreate 数据)当滑动完成时它已经加载)。
最佳答案
最好的方法是让各个组件从存储库请求数据,并在存储库级别处理缓存。
当ViewPager的内容发生变化时,只需通知播放器新内容的ID即可。然后播放器将从存储库中获取该内容。存储库“知道”该内容已被下载并从数据库而不是网络提供它。
如果数据库不够快,可以在存储库内实现内存缓存。
关于Android MVP - 重用多个 fragment 的共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497285/