android - 使用多个数据源填充 Android ListView(使用加载器)

标签 android android-contentprovider listadapter android-cursorloader

我有三个数据库表:StacksDatesZ,其中 Stacks 是我的主表, DatesZ 是“子”表,有一个外键列,链接到 Stacks 的主键列。 (请原谅我的术语,如果需要,我可以提供架构。)

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

在典型的 ListFragment 中,我使用在 LoaderManager 上讨论的实现构建了一个 ListView reference page - 创建一个空适配器,然后在我的查询完成时将 Cursor 换出(在 onCreateLoader() 中查询并在 onLoadFinished() 中换出) .

我查询 Stacks 表(使用 URI,因为我的数据库前面是一个使用 Simple Content Provider 实现的 Content Provider library ),因为我想绑定(bind)到适配器中 getView() 中每个列表项的值大部分都可以在这里找到,而且工作正常。

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

是否有一种标准的方法来实现这一点,使用多个数据源填充 ListView (最好使用加载器)?

编辑:

  • Dates 表可能有多个记录(具有不同的值) 对于每个关联的 Stack
  • 我有一个 ContentProvider,它根据 URI 提供对所有三个表的访问
  • 我也很乐意使用多个加载器,因为我怀疑无论如何我都必须这样做,因为我需要在 fragment 中显示与 ListView 中的内容无关的其他信息。

最佳答案

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

  1. 预先在您的 ContentProvider 中完成所有操作,例如使用子查询或更复杂的查询。
  2. AdaptergetView() 中执行异步查询。这类似于加载远程图像的工作方式。

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

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

关于android - 使用多个数据源填充 Android ListView(使用加载器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094377/

相关文章:

android - 如何为通话记录实现 ContentObserver

android - 安装在控制台中显示错误 : INSTALL FAILED CONFLICTING PROVIDER

android - 将 SeparatedListAdapter 用于 ListView 在 Android 2.1 上崩溃但适用于 2.2

android - 连续语音识别意外停止

ViewPager 的 Android 事件监听器数据绑定(bind)

java - 无法理解消息 GCM

android - 想要将数组的一部分加载到 android ListAdapter 中

android - 在 map 上显示多条不同颜色的多段线

Android Facebook 内容提供商权限

android - 简单游标适配器不工作