我正在构建一个ListView,ListView中的每个项目都有来自几个不同游标的数据。我有一个对象,它包含ListView中每个项目的所有数据。我正在使用这些对象的ArrayList来填充ListView。
我现在正在实现它的方式,我首先得到一个Cursor到ContentProvider A中的所有行。我循环遍历此游标,将其三个字段添加到ArrayList中的每个对象。在此循环的每次迭代中,将创建一个新游标,以根据ContentProvider A中的字段从ContentProvider B中提取字段。此字段用于在ContentProvider C中提取另一个字段。因此,基本上,有很多游标正在创建,后续游标的查询依赖于之前游标的数据。
据我所知,使用CursorLoaders和LoaderManager在单独的线程中生成游标并正确管理其生命周期是理想的。我不确定如何翻译这种方法,或者实际上是否有一种更好的方法可以最大限度地减少游标数量。
答案 0 :(得分:0)
我认为在这种情况下,简单的CursorLoader
不是正确的解决方案。我想你可能有两种可能性:
CursorLoader
作为第一个Cursor
并使用CursorLoader
- 在ListAdapter的getView()
方法中进行链接。使用CursorLoader
- 链接,我的意思是在initLoader()
方法中调用onLoadfinished()
。 AsyncTaskLoader
并在AsyncTask
您需要的对象树中创建。在这两个解决方案中,我认为第二个可能是更好的解决方案 - 除非列表很长。这是ContentProviders不足的一个领域。您基本上必须查询n + 1(在您的情况下为n + 2)次,其中一个连接应该足够。
如果你的列表很长,第二种方法不可用,你的AsyncTask需要很长时间才能让用户接受它。
如果你听说过(或发现自己)一个更好的解决方案,请在这里ping我。