游标和嵌套的RecyclerViews

时间:2015-01-29 12:38:31

标签: android performance android-cursoradapter android-recyclerview android-cursorloader

应用程序的UI看起来像这样,并且可以包含适量的数据(几百种产品,几十种类别)。产品条带从左向右滚动。整个UI垂直滚动。

Category 1
   Product 1    Product 2    Product 3    Product 4    <-- scrolls -->

Category 2
   Product 1    Product 2    Product 3    Product 4    <-- scrolls -->

Category 3
   Product 1    Product 2    Product 3    Product 4    <-- scrolls -->

我已经将水平滚动产品部分(在每个类别中)实现为RecyclerViews。垂直滚动(包含产品部分)在垂直滚动的RecyclerView中实现。使用来自SQL的简单虚拟数据,它工作正常,性能良好。

但是要使用真实数据,我需要每个部分显示自己的产品子集。似乎需要运行一个查询来获取产品Cursor(CursorLoader)来提供对所有类别的所有产品的访问,然后使用该游标上的过滤器来显示每个水平中的一个类别的产品,产品RecyclerView

我使用的是https://gist.github.com/Shywim/127f207e7248fe48400b,它是一个CursorRecyclerAdapter。到目前为止它运行良好,并支持过滤,但我无法看到如何实现过滤。我已经为FilterQueryProvider找到了一些示例,但它们似乎具有重要的性能影响,因为它似乎需要再次重新运行查询。我想知道我的方法是否基本合理。

在我的研究中,我还发现devs建议没有人使用FilterQueryProvider并使用CursorLoader,但如果我依赖CursorLoader,如何在没有一系列低效查询的情况下实现它来填充UI的行?我不禁想到必须有一种方法来做一个产品查询并过滤每行的光标。

TLDR;在具有一个相当大的数据集需要在各种Cursor支持的视图的子集中显示的场景中,为了将数据细分为“子游标”同时保持良好的性能和效率,最好的方法是什么?

更新。自发布以来,我发现在查询产品之前我需要知道我需要显示哪些类别 - 所以我希望有两个查询,系列执行。该应用程序处于信息亭设置中,具有一种设备类型,没有屏幕旋转,并且一个应用程序正在运行,因此配置更改不是问题。所以我认为我可以使用AsyncTask运行第一个查询来获取类别列表(包含产品),然后运行查询(使用每个类别ID)来获取每个类别的产品光标。到目前为止,这是我提出的最佳方法,必须有一个更好的方法,尤其是因为我不想运行大量查询,尤其是当大多数查询在用户向下滚动页面之前没用时。

0 个答案:

没有答案