0

我有通过 CursorLoader 填充的列表视图。CursorLoader 由 LoaderManager.LoaderCallback 的 createLoader 方法创建。我对此没有任何问题。问题在于我想在列表视图填充完成后开始另一个任务并用其他数据填充列表视图。我目前的解决方案是在 onLoadFinished 方法中启动另一个加载器。

这是正确的解决方案还是可以以更优雅和有效的方式完成?你能给一些建议吗,因为我在android开发方面没有太多经验。提前致谢。

4

1 回答 1

3

从中加载onLoadFinished将没有问题。我在我的一个宠物项目中做了类似的事情。我从自己的 ContentProvider 加载数据,然后从手机的 Contact ContentProvider 加载联系人数据。我的数据库中的每个条目都可以引用多个联系人,因此我必须在知道要加载哪些联系人信息之前加载我的项目。当我第一次收到我的项目数据时,我将 init/restart LoaderManager 调用链接到onLoadFinished. 它工作得很好,之后我将联系人数据用作列表。当然,我没有使用这种方法将数据加载到现有列表视图项内的视图中。我在我的项目的详细视图中使用了它自己的列表中的数据。它应该仍然可以与您想要做的事情一起工作,但是将数据附加到视图和诸如此类的东西可能会变得混乱,特别是因为视图“生命周期”超出了您的控制范围。

IMO 更好的方法是编写自定义 CursorAdapter 代码,该 CursorAdapter 将使用 AsyncTask 或 AsyncQueryHandler 在创建视图时获取额外数据。确保在列表滚动时缓存数据以供后续使用。第二种方法的好处是独立于外部/辅助加载程序。它封装了显示所需数据所需的所有逻辑,包括加载缺失的部分。它使视图数据和显示逻辑保持一致,安全地隐藏在可重用模块中。

于 2013-02-26T21:17:53.763 回答