CursorLoader在循环内部使用Cursor访问

时间:2013-04-12 03:58:27

标签: android android-contentprovider android-cursor android-loadermanager android-cursorloader

我正在构建一个ListView,ListView中的每个项目都有来自几个不同游标的数据。我有一个对象,它包含ListView中每个项目的所有数据。我正在使用这些对象的ArrayList来填充ListView。

我现在正在实现它的方式,我首先得到一个Cursor到ContentProvider A中的所有行。我循环遍历此游标,将其三个字段添加到ArrayList中的每个对象。在此循环的每次迭代中,将创建一个新游标,以根据ContentProvider A中的字段从ContentProvider B中提取字段。此字段用于在ContentProvider C中提取另一个字段。因此,基本上,有很多游标正在创建,后续游标的查询依赖于之前游标的数据。

据我所知,使用CursorLoaders和LoaderManager在单独的线程中生成游标并正确管理其生命周期是理想的。我不确定如何翻译这种方法,或者实际上是否有一种更好的方法可以最大限度地减少游标数量。

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下,简单的CursorLoader不是正确的解决方案。我想你可能有两种可能性:

  • 使用CursorLoader作为第一个Cursor并使用CursorLoader - 在ListAdapter的getView()方法中进行链接。使用CursorLoader - 链接,我的意思是在initLoader()方法中调用onLoadfinished()
  • 使用AsyncTaskLoader并在AsyncTask您需要的对象树中创建。

在这两个解决方案中,我认为第二个可能是更好的解决方案 - 除非列表很长。这是ContentProviders不足的一个领域。您基本上必须查询n + 1(在您的情况下为n + 2)次,其中一个连接应该足够。

如果你的列表很长,第二种方法不可用,你的AsyncTask需要很长时间才能让用户接受它。

如果你听说过(或发现自己)一个更好的解决方案,请在这里ping我。