我将从我想要完成的事情开始。
我有一个 ListFragment,与 LoaderCallbacks 关联以从数据库中检索数据。使用 AsyncTask 下载数据,并将其插入数据库。当用户到达列表底部时,使用 CWAC-Endless 小部件启动 AsyncTask 并下载更多数据。
我在这里遇到了几个问题,我已经尝试了很多个晚上来解决这个问题,我决定来这里寻求帮助。
第一个问题是configChanges。当用户旋转设备时,Activity 被销毁,然后重新创建所有 Fragment。我知道我可以将 setRetainInstance 设置为 true,但这无济于事,因为当 Activity 被拆除时 AsyncTask 仍在运行!
第二个问题与加载器有关。如果数据已下载,并且 AsyncTask 正常完成,则项目将正常显示在 List 中。假设数据库中有 20 个项目。当用户旋转设备,重新创建 Fragment 时,需要再次关联 Loader。发生这种情况时,数据不会立即加载到列表中,而是会启动用于下载的 AsyncTask,因为 CWAC-Endless 适配器认为它位于列表中的最后一项!
这两个问题都让我筋疲力尽。我需要重新审视这一点,因为我无处可去。
任何建议都可以,如果需要,我可以发布源代码。
编辑
好的,这里有更多细节可以帮助您提出一些建议。
我正在从互联网下载数据,它一次只会返回一定数量的项目。然后我必须在需要时请求更多数据(分页)。
我决定使用数据库,因为新的 Loader 功能使得确保数据加载有效且一致且没有任何线程问题变得如此简单。如果放弃 Loader 方法并使用标准适配器呈现数据是有意义的,我很乐意放弃这种方法并使用它。我只是想看看是否有人可以提供有关此解决方案为何如此困难的见解。
谢谢,
亚当