主活动(电影列表):
我有一个活动,其中包含一个100%大小的可循环视图,显示电影列表。每部电影在recyclerview中都有一个封面图像,用户可以点击该图像以导航到播放器视图。 MainActivity(及其recycler view)由ViewModel支持。 Movie对象(由LiveData包装)具有您期望的内容,例如标题,类别,封面图像和指向mp4文件的URL。
private val movies = MutableLiveData<List<Movie>>()
为了转换到PlayerActivity,意图将所选电影的ID作为字符串额外参数传递。
PlayerActivity
当在MainActivity的recycler视图中选择电影单元格时,我创建一个新的意图来转换到PlayerActivity,即播放电影的地方。这里还显示有电影封面图像的imageView。此视图也由ViewModel支持。
private val selectedMovie = MutableLiveData<Movie>()
在OnCreate()方法中,我从意图中获取movie_id字符串附加项,并创建ViewModel(ViewModel使用movie_id进行网络请求)。此视图还有一个按钮,当触摸时,转换用户到ScreenshotActivity。跳转到ScreenshotActivity的意图也传递了movie_id作为字符串附加项。
ScreenshotActivity
该活动显示电影截图的recyclerview,并且当触摸时,会向服务器发送网络请求,以使用其中一张截图更新电影的封面图像。该活动从PlayerActivity意图中获取movie_id额外信息来设置视图。
问题
- 显然每次做网络请求都很浪费资源,我理解应该使用类似room的本地缓存此信息。 如果没有本地数据库,有没有更好的方法来处理上述ViewModel?也许是单个可由上述3个活动访问的ViewModel?这样,可以直接对电影对象进行更改并在所有视图之间同步?有没有关于如何实现这一点的好例子?
- 鉴于我当前的3个活动各自具有ViewModel,当在ScreenshotActivity中更新截图时,如何通知MainActivity更新截图并通知PlayerActivity更新播放器上的封面图像?