Android 带有加载程序和EndlessCursorAdapter的ListFragment-噩梦
我将从我正在努力完成的事情开始 我有一个ListFragment,与LoaderCallbacks关联以从数据库检索数据。使用AsyncTask下载数据,并将其插入数据库。当用户到达列表底部时,使用CWAC无止境小部件启动AsyncTask并下载更多数据 我在这里面临着几个问题,我花了好几个晚上试图解决这个问题,我决定来这里寻求帮助 第一个问题是配置更改。当用户旋转设备时,活动将被销毁,然后重新创建所有片段。我知道我可以使用setRetainInstance设置为true,但这并没有帮助,因为当活动被拆除时,AsyncTask仍在运行 第二个问题与加载程序有关。如果下载了数据,并且AsyncTask完成得很好,那么这些项目将显示在fine列表中。假设数据库中有20个项目。当用户旋转设备并重新创建片段时,需要再次关联加载程序。发生这种情况时,数据不会立即加载到列表中,而是启动下载的AsyncTask,因为CWAC无尽适配器认为它位于列表中的最后一项 这两个问题都让我筋疲力尽。我需要对这件事有一个新的认识,因为我不知道该怎么办 任何建议都可以,如果需要,我可以发布源代码 编辑 好的,这里有更多的细节来帮助你提出一些建议 我从互联网上下载数据,一次只能返回一定数量的项目。然后,我必须在需要时请求更多数据(分页) 我决定使用一个数据库,因为新的加载器功能使它非常简单,可以确保数据的加载效率和一致性,而不会出现任何线程问题。 如果放弃加载器方法并使用标准适配器渲染数据是有意义的,我非常乐意放弃这种方法并使用它。我只是想看看是否有人能洞察为什么这个解决方案如此困难 谢谢 亚当 当用户到达列表底部时,使用CWAC无止境小部件启动AsyncTask并下载更多数据 FWIW,我还没有尝试过使用这种组合(游标、加载程序和Android 带有加载程序和EndlessCursorAdapter的ListFragment-噩梦,android,android-fragments,android-asynctask,commonsware-cwac,Android,Android Fragments,Android Asynctask,Commonsware Cwac,我将从我正在努力完成的事情开始 我有一个ListFragment,与LoaderCallbacks关联以从数据库检索数据。使用AsyncTask下载数据,并将其插入数据库。当用户到达列表底部时,使用CWAC无止境小部件启动AsyncTask并下载更多数据 我在这里面临着几个问题,我花了好几个晚上试图解决这个问题,我决定来这里寻求帮助 第一个问题是配置更改。当用户旋转设备时,活动将被销毁,然后重新创建所有片段。我知道我可以使用setRetainInstance设置为true,但这并没有帮助,因为当
AsyncTask
)的EndlessAdapter
。特别是引用文件:
请注意,这已经用ArrayAdapter
进行了大量测试,但可能不适用于其他适配器类型
我甚至不太确定应用于本地数据库的EndlessAdapter
的用例是什么。如果你有一个疯狂的长列表(例如,数千行),答案不是“逐步加载”,而是“提供不同的用户体验以避免长列表”。对于较短的列表,只需加载整个内容并完成即可EndlessAdapter
适用于加载费用昂贵的情况(例如,互联网访问)
这就是说,我将把“玩EndlessAdapter
和Loader
”添加到我的待办事项列表中
我知道我可以使用setRetainInstance设置为true,但这并没有帮助,因为当活动被拆除时,AsyncTask仍在运行
那么<在新活动通过onCreate()
之前,不会调用code>onPostExecute()。此外,在基于片段的模型中,您的任务应该与片段对话,如果通过setRetainInstance(true)
保留该片段,则新旧活动中都是相同的片段实例
发生这种情况时,数据不会立即加载到列表中
应该相当快地加载它,尽管是异步加载。此外,我不明白为什么这与最初创建活动时有什么不同
相反,下载的AsyncTask被启动,因为CWAC无止境适配器认为它位于列表中的最后一项
在获得数据之前,不应创建EndlessAdapter
当用户到达列表底部时,使用CWAC无止境小部件启动AsyncTask并下载更多数据
FWIW,我还没有尝试过使用这种组合(游标、加载程序和AsyncTask
)的EndlessAdapter
。特别是引用文件:
请注意,这已经用ArrayAdapter
进行了大量测试,但可能不适用于其他适配器类型
我甚至不太确定应用于本地数据库的EndlessAdapter
的用例是什么。如果你有一个疯狂的长列表(例如,数千行),答案不是“逐步加载”,而是“提供不同的用户体验以避免长列表”。对于较短的列表,只需加载整个内容并完成即可EndlessAdapter
适用于加载费用昂贵的情况(例如,互联网访问)
这就是说,我将把“玩EndlessAdapter
和Loader
”添加到我的待办事项列表中
我知道我可以使用setRetainInstance设置为true,但这并没有帮助,因为当活动被拆除时,AsyncTask仍在运行
那么<在新活动通过onCreate()
之前,不会调用code>onPostExecute()。此外,在基于片段的模型中,您的任务应该与片段对话,如果通过setRetainInstance(true)
保留该片段,则新旧活动中都是相同的片段实例
发生这种情况时,数据不会立即加载到列表中
应该相当快地加载它,尽管是异步加载。此外,我不明白为什么这与最初创建活动时有什么不同
相反,下载的异步任务被启动,因为