如何在活动之间传递大型集合(Master-Detail流程)

Add*_*dev 9 java android android-activity

背景:

我正在实现一个应用程序,它可以从Web服务中读取有关电影的信息.该Web服务返回有关每部电影的几个信息(标题,日期,海报网址,导演,演员等).

该Web服务支持分页,因此电影以100个一包的形式加载.

执行:

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

在此输入图像描述

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

在此输入图像描述

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

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

问题

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

但由于电影列表很大,如果用户在网格中滚动很多,则json的大小对于Bundle来说非常大(请参阅字符串数据的最大大小),从而获得运行时异常.

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

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

vil*_*101 5

我不确定这是否是一个好建议.

创建另一个类并添加一个静态方法让我们将它命名为MovieUtil.

//样品

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

在启动DetailedGalleryActivity之前,在MovieUtil.setMovies()上设置电影列表

然后在DetailsGalleryActivity的oncreate上使用MovieUtil.getMovies()初始化List

注意:您可以在关闭DetailedGalleryActivity时清除movieutil上的电影列表.