【问题标题】:What is the purpose of Cursor Adapter?光标适配器的用途是什么?
【发布时间】:2014-01-26 06:26:20
【问题描述】:
现在,我使用 ListView 和 ArrayAdapter 来显示来自 sqlite 的数据。我的旧实现是从 db 中检索并设置为 arrayAdapter。然后在listview中设置adapter。
但现在正在考虑转向高效的适配器。如果 sqlite 有数千条记录怎么办?我知道我必须检索前 20 条记录,然后根据滚动检索下一个项目。我想知道我可以通过使用游标适配器来实现吗?或者我可以知道更好的解决方案吗?
【问题讨论】:
标签:
android
sqlite
listview
android-listview
【解决方案1】:
当数据库/服务器响应中有数千条记录或您从中获取信息的任何内容时,最佳做法是使用“延迟加载”技术,基本上它的作用是向用户显示数据集块例如,一次 50 个元素,因此,无需加载 950 个甚至可能不会使用的元素,这种技术也大大提高了应用程序响应和您的内存,现在您如何实现它真的取决于您,有一个BaseAdapter 类自行完成,或者游标/数组适配器的良好实现也可以解决问题。
值得一提的是,游标有一个优势:
Cursor 让 Android 通过检索来更有效地管理资源
并按需释放行和列值。
希望对你有帮助!
问候!
【解决方案2】:
首先,我使用CursorAdapter的主要原因是如果sqlite中的数据发生变化,内容会自动变化。如果下面有变化,我不需要考虑刷新 UI。
其次,sqlite 的query 和listview 都已经做了一些你想要的优化。 sqlite 默认不会给出执行查询时的所有数据。它使用滑动窗口逐步给出查询结果。而listview 也不会一次绘制所有项目,它会在用户向下滚动时绘制项目。
希望这会有所帮助,但不能完全回答您的问题
【解决方案3】:
你可以使用一个线程来从数据库中检索数据并放入一个地图或列表中。然后当您从 Map 滚动读取时需要每 20 条记录之类的数据。它可能会帮助你。
只需在数据库和视图之间再做一层。