我有三个数据库表:Stacks
、Dates
和 Z
,其中 Stacks
是我的主表, Dates
和 Z
是“子”表,有一个外键列,链接到 Stacks
的主键列。 (请原谅我的术语,如果需要,我可以提供架构。)
以后我将只提及Stacks
和Dates
,以减少我解释的复杂性,但如果它是相关的,Z
将以与 Dates
完全相同的方式使用。
在典型的 ListFragment
中,我使用在 LoaderManager
上讨论的实现构建了一个 ListView
reference page - 创建一个空适配器,然后在我的查询完成时将 Cursor
换出(在 onCreateLoader()
中查询并在 onLoadFinished()
中换出) .
我查询 Stacks
表(使用 URI,因为我的数据库前面是一个使用 Simple Content Provider
实现的 Content Provider
library ),因为我想绑定(bind)到适配器中 getView()
中每个列表项的值大部分都可以在这里找到,而且工作正常。
但是,我还希望绑定(bind) Dates
表中的一些值,尽管我不确定如何执行此操作。在使用加载器之前,我会在适配器中创建一个新的 SQLiteOpenHelper
,并直接在 getView() 方法中访问次要项,即从 返回
表。这很慢,事后看来我很确定这是个坏主意 :PCursor
>日期
是否有一种标准的方法来实现这一点,使用多个数据源填充 ListView (最好使用加载器)?
编辑:
Dates
表可能有多个记录(具有不同的值) 对于每个关联的Stack
。- 我有一个 ContentProvider,它根据 URI 提供对所有三个表的访问
- 我也很乐意使用多个加载器,因为我怀疑无论如何我都必须这样做,因为我需要在 fragment 中显示与
ListView
中的内容无关的其他信息。
最佳答案
如果您需要按行执行此操作,您基本上有两种选择:
- 预先在您的
ContentProvider
中完成所有操作,例如使用子查询或更复杂的查询。 - 在
Adapter
的getView()
中执行异步查询。这类似于加载远程图像的工作方式。
这两种方法各有优势。 #1 可能更简单,但如果您的列表中有很多项目,则可能不够快。 #2 很快,因为您将只查询相关日期,但是在滚动时取消(或避免进行)查询可能会很痛苦。
当您必须执行未知数量的加载时,加载程序没有意义。
关于android - 使用多个数据源填充 Android ListView(使用加载器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094377/