如何以高性能将数据库中的数据显示到 RecyclerView 中?

How to show data from database into a RecyclerView with high performance?

我为 RecyclerView 编写了自己的 CursorAdapter,如下所示 link:https://gist.github.com/skyfishjy/443b7448f59be978bc59

然后我发现每当我更改数据库中的某些内容并想在 RecyclerView 中显示它时,我需要通过 db.query() 创建一个新的 Cursor 并使用 CursorAdpater 的 changeCursor()。由于query()会扫描数据库中的所有行,所以当数据量很大时,即使我只插入数据库中的一行,RecyclerView也会缓慢刷新。

此外,众所周知,RecyclerView为开发者提供了notifyItemInserted/Removed(position),让RecyclerView可以局部刷新,这对memory/time很有用和有益。但是,当我使用 CursorAdapter 时,我不知道何时以及如何使用这些方法,因为更改光标并不是直接向与 RecyclerView 绑定的数据集添加内容,而是刷新所有项目。

那么有没有更好的方法在RecyclerView中显示数据库中的数据,并使用RecyclerView的改进方法来显示数据库的多样性?

我可以告诉你我做了什么... A. 使用 Loader 加载游标。 B. 将游标复制到附加到适配器的数组列表中(游标不直接附加到适配器),关闭游标。如果没有很多数据,效果很好——如果有很多行,那么我会将其中一些加载到数组列表中,然后当用户向下滚动时,我会再次查询并从数组的最后一行加载。 C. 当用户想删除或添加一些东西时,我会先对 arrayList 进行操作 (UI thread) notifiyItemChanged 然后更改数据库 (回帖) 希望我能帮到你。