2

我有三个数据库表:StacksDatesZStacks我的主表在哪里,并且DatesZ是“子”表,具有外键列,链接到 的主键列Stacks。(请原谅我的术语,如果需要,我可以提供架构。)

以后我将只提及Stacksand Dates,以减少我的解释的复杂性,但如果它是相关的,Z将以与 完全相同的方式使用Dates

在一个典型的例子ListFragment中,我使用参考页面ListView上讨论的实现来构建一个- 创建一个空适配器,然后在我的查询完成时换出(查询输入和换入)。LoaderManager CursoronCreateLoader()onLoadFinished()

我查询Stacks表(使用 URI,因为我的 DB 前面是Content Provider使用Simple Content Provider library实现的),因为我想绑定到getView()适配器中每个列表项的值大多在这里找到,这很好用。

但是,我也希望绑定Dates表中的一些值,尽管我不确定如何执行此操作。在使用加载器之前,我会SQLiteOpenHelper在适配器中创建一个新的,并直接在getView() 方法中访问辅助项,即CursorDates表中返回s。这很慢,我很确定事后看来这是个坏主意:P

有没有一种标准的方法来实现这一点,使用多个数据源(理想情况下使用加载器)填充列表视图?

编辑:

  • 对于每个关联的表,该Dates表可能有多个记录(具有不同的值)Stack
  • 我有一个 ContentProvider 可以访问所有三个表,具体取决于 URI
  • 我也很乐意使用多个加载器,因为我怀疑无论如何我都必须这样做,因为我需要在片段中显示与ListView.
4

1 回答 1

1

如果您需要逐行执行此操作,您基本上有两种选择:

  1. 在您的 中预先做所有事情ContentProvider,例如通过使用子查询或更复杂的查询。
  2. getView()您的Adapter. 这类似于加载远程图像的工作方式。

两种方法都有其优势。#1 可能更简单,但如果您的列表中有很多项目,则可能不够快。#2 速度很快,因为您只会查询相关日期,但是在滚动时取消(或避免进行)查询可能会很痛苦。

当您必须执行未知数量的加载时,加载程序没有意义。

于 2012-12-30T21:48:49.660 回答