如何在活动之间传递大型集合(主从流)

2024-05-03

背景:

我正在实现一个从网络服务读取有关电影信息的应用程序。该网络服务返回有关每部电影的一些信息(标题、日期、海报网址、导演、演员等)。

该 Web 服务支持分页,因此电影以 100 部为一组加载。

执行:

这个想法是显示一个包含所有海报的网格。当用户向下滚动时自动请求更多项目。

单击某个项目时,用户将导航到包含所选电影的详细信息视图的图库,从而允许使用 ViewPager 滚动浏览详细信息。

因此,我们的想法是将网格中检索到的电影集合传递给“DetailedGalleryActivity”。

更新:当用户离开片段时还需要保存状态以处理片段生命周期。您可以启用开发人员选项来测试它:不要保留活动

问题

我的第一个方法是在 json 中序列化电影集合,并将其作为 String extra 传递给 Activity。

但由于电影列表很大,如果用户在网格中滚动很多,则对于 Bundle 来说 json 的大小会非常大(请参阅字符串数据的最大大小 https://stackoverflow.com/questions/28729955/max-size-of-string-data-that-can-be-passed-in-intents),获取运行时异常。

我检查了一些答案,这些答案讨论了在启动详细活动之前将数据保留在 SharedPreferences 或其他持久存储中,然后从详细信息中访问它。我发现这个解决方案很奇怪,因为它忽略了使用自定义和手工解决方案在活动之间传递数据的机制。

解决这个问题的最佳方法是什么?


我也不确定这是否是一个好的建议。

创建另一个类并添加一个静态方法,我们将其命名为 MovieUtil。

//sample

private class MovieUtil {
  private static List<Movies> movies;
  public static List<Movies> getMovies();//getter
  public static void setMovies(List<Movie> movies);//setter
}

在开始详细图库活动之前,请在 MovieUtil.setMovies() 上设置电影列表

然后在DetailedGalleryActivity 的oncreate 上使用MovieUtil.getMovies() 初始化列表

注意:当您关闭详细图库活动时,您可以清除 movieutil 上的电影列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在活动之间传递大型集合(主从流) 的相关文章

随机推荐