从另一个加载器启动加载器对还是错?

时间:2013-02-26 19:05:20

标签: android android-asynctask android-loadermanager

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

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

1 个答案:

答案 0 :(得分:3)

onLoadFinished加载可以顺利运行。我在一个宠物项目中做了类似的事情。我从我自己的ContentProvider加载数据,并从手机的Contact ContentProvider中加载了联系人数据。我的数据库中的每个条目都可以引用多个联系人,所以在我知道要加载哪个联系人信息之前我必须加载我的项目。当我第一次收到onLoadFinished中的项目数据时,我将init / restart LoaderManager调用链接起来。它工作正常,之后我将联系人数据用作列表。当然,我没有使用这种方法将数据加载到现有列表视图项内的视图中。我在项目的详细视图中使用了自己列表中的数据。它应该仍然适用于您想要做的事情,但是它可能会使视图混乱地附加数据,尤其是因为视图“生命周期”不受您的控制。

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