0

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

我现在实现它的方式是,我首先获得一个指向 ContentProvider A 中所有行的游标。我遍历这个游标,将它的三个字段添加到 ArrayList 中的每个对象。在此循环的每次迭代中,都会创建一个新游标,以根据 ContentProvider A 中的字段从 ContentProvider B 中提取一个字段。该字段用于在 ContentProvider C 中提取另一个字段。因此,本质上,创建了很多游标,并且后续游标的查询依赖于来自先前游标的数据。

据我了解,使用 CursorLoaders 和 LoaderManager 在单独的线程中生成游标并正确管理它们的生命周期是理想的。我不确定如何翻译这种方法,或者实际上是否有更好的方法可以首先最小化游标的数量。

4

1 回答 1

0

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

  • CursorLoader首先使用 a并在 ListAdapter 的方法中Cursor使用-chaining。使用-chaining 我的意思是调用 你的方法。CursorLoadergetView()CursorLoaderinitLoader()onLoadfinished()
  • 在您需要的对象树中使用AsyncTaskLoader并创建。AsyncTask

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

如果您的列表很长,则第二种方法不可用,您的 AsyncTask 将花费很长时间让用户接受它。

如果您听说过(或发现自己)有更好的解决方案,请在此处联系我。

于 2013-04-15T19:17:13.640 回答