在单个列表中显示多个异步任务的结果

Displaying results of multiple async Tasks in a single list

原屏

我的屏幕顶部有一个微调器,当用户 select 从微调器中输入一个值时,我们会在下面的列表中显示该 selection 的项目。

数据以分页方式使用异步任务从服务器获取,随着用户滚动,更多数据使用异步任务从服务器获取以添加到列表中。 (即获取项目 1 到 20,当用户向下滚动时,获取项目 21 到 40)。

例如:当您 select "Bucket 1" 时,列表显示 "Bucket 1" 中的所有项目,然后当您 select "Bucket 2" 时,列表变为显示 "Bucket 2" 中的所有项目。我们永远不知道每个桶中有多少项目,数字可能会有所不同。

新的所需屏幕

我需要更改此屏幕以便不再使用微调器。

相反,我想要 one 列表,其中包含 all 来自 all 的项目水桶(见下图)。我想显示存储桶 1 中的所有项目,然后显示存储桶 2 中的所有项目,依此类推。

注意:我可能希望也可能不希望分隔行显示存储桶的名称,

我遇到的问题是服务器一次只允许我获取一个桶的项目,因此我必须调用以从桶 1 中获取项目,然后当用户滚动时如果我 运行 从存储桶 1 中取出项目,从存储桶 2 中获取项目,依此类推。

我需要将所有项目都放在一个列表中,这样我就可以 select 多个项目跨存储桶。

帮助

如何编写这样的列表?该列表包含来自多个不同异步调用的数据。

我想我必须开始调用以计算所有存储桶中总共有多少项,这就是我的列表计数。

我看到有一个 "MergeCursor" 但这对我没有帮助,因为我没有从数据库中获取数据。

我看到有一个 "MergeAdapter",它是一个包含子适配器的适配器。就我而言,我将为每个存储桶配备 1 个子适配器。我的 MergeAdapter 计数将是所有子项目的总数,然后在为每一行获取 view/items 时,我将不得不使用每个桶的位置和大小来知道从哪个桶获取项目。

如有任何建议,我们将不胜感激。

我在从服务器获取项目的 AsyncTask 中解决了这个问题。适配器将它想要数据的行传递给任务。然后该任务会查明桶 1 是否有这些项目,如果有 returns 那么,如果没有所有项目,则从适配器计数中删除第一个桶的大小,然后从适配器计数中删除第二个桶被检查等等,直到所有项目都被return编辑。

例子

桶 1:5 个项目(A、B、C、D、E) 桶 2:3 件商品(F、G、H) 存储桶 3:10 件商品(I、J、K、L、M、N、O、P、R、S)

适配器要求项目 1 - 4:

  • SyncTask return 存储桶 1 中的项目 1 - 4
  • 总计 returned = A,B,C,D

适配器要求第 5 - 8 项:

  • SyncTask 首先查看 bucket 1 是否有 5 个或更多项,如果有,它会从 bucket 1 中获取第 5 个项,E

  • SyncTask 在被请求 4 个项目时只有 1 个项目,并且存储桶 1 有 运行 个项目。因此,SyncTask 在 Bucket 2 中查找。调整计数以删除 Bucket 1 中的项目数,因此新计数要求 Bucket 2 中的 1 - 3,它们是 returned,F,G,H

  • 总计 returned = E,F,G,H

适配器要求第 9-12 项

  • AsyncTask 检查起始数字是否大于第一个桶中的数字,因此 AsyncTask 通过从 Bucket 1 中减去总数来创建一个新计数

  • 所以我们正在寻找 4 - 7

  • AsyncTask 然后检查起始数字是否大于第二个桶中的数字,因此 AsyncTask 通过从更新计数的 Bucket 2 中取出总数来创建一个新计数

  • 所以我们正在寻找 1 - 4

  • 桶 3 有 4 个或更多项目,所以我们 return 前 4 个项目

  • 总计 returned = I,J,K,L