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

时间:2018-08-29 16:42:16

标签: android list datasource

原始屏幕

当用户从微调器中选择一个值时,我有一个顶部带微调器的屏幕,我们在下面的列表中显示该选择项。

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

例如:当您选择“ Bucket 1”时,列表将显示“ Bucket 1”中的所有项目,然后,当您选择“ Bucket 2”时,列表将更改为显示“ Bucket 2”中的所有项目。我们永远不知道每个存储桶中有多少个项目,数量可能会有所不同。

enter image description here

新的所需屏幕

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

相反,我希望有一个一个列表,其中包含 all 个存储桶中的 all 个项目(请参见下图)。我想显示存储桶1中的所有项目,然后显示存储桶2中的所有项目,依此类推。

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

我遇到的问题是服务器一次只允许我从一个存储桶中获取项目,因此我将不得不调用以从存储桶1中获取项目,然后如果用户滚动了如果从桶1从桶2中获取物品,依此类推。

我需要将所有物品都放在一个列表中,以便可以跨存储桶选择多个物品。

enter image description here

帮助

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

我想我必须先打电话来计算所有存储分区中共有多少个项目,这就是我的列表计数。

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

我已经看到有一个“ MergeAdapter”,它是一个包含子适配器的适配器。就我而言,每个存储桶都需要一个子适配器。我的MergeAdapter计数将是所有子项的总数,然后在获取每一行的视图/项目时,我将不得不使用每个存储桶的位置和大小来知道从哪个存储桶中获取该项目。

任何实现此目的的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我在AsyncTask中解决了此问题,并从服务器获取了项目。适配器将需要数据的行传递给任务。然后,任务会找出存储桶1是否包含这些项,如果存储桶1包含这些项,则返回它们,如果没有所有存储桶,则从适配器计数中删除第一个存储桶的大小,并检查第二个存储桶,依此类推直到所有物品都退回。

示例

存储桶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从存储桶1返回项目1-4
  • 返回总数= A,B,C,D

适配器要求输入5-8:

  • SyncTask首先查看存储桶1是否具有5个或更多项目,它从存储桶1 E中获取第5个项目。

  • 当SyncTask被要求输入4个项目,而存储桶1中的项目用完时,它只有1个项目。因此,SyncTask在存储桶2中查找。调整计数以删除存储桶1中的项目数,因此新计数要求存储桶2中的1-3,并返回F,G,H

    < / li>
  • 返回总数= E,F,G,H

适配器要求输入9-12项

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

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

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

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

  • 第3个桶中有4个或更多物品,因此我们返回前4个物品

  • 返回总数= I,J,K,L