【发布时间】:2016-07-21 15:27:43
【问题描述】:
我想使用数据库填充 RecyclerView。由于目前没有用于使用数据库填充 RecyclerView 的内置适配器,因此我使用了 Shywim 的 CursorRecyclerAdapter。我创建了一个示例应用程序来测试它,它运行良好。我不喜欢的功能是在结果集中有一个_id 列,并在每个数据库操作上调用swapCursor(),主要是插入和删除。这与使用SimpleCursorAdapter 时的ListView 相同。我的查询是如果我使用 ArrayList 作为数据集而不是直接使用 Cursor。
这样做的好处(我的假设):
-
结果集中不再需要
_id列。 -
可以从数据库中取出数据,放入ArrayList并关闭游标。
-
无需在每个数据库操作上调用
swapCursor(),因为我可以从 ArrayList 中添加/删除指定元素并调用notifyDataSetChanged()我不知道
swapCursor()和notifyDataSetChanged()背后的确切逻辑。所以,不能决定哪一个是轻量级和高效的。
如果有人曾经经历过或曾经这样做过,请消除我的疑虑。欢迎任何更正和建议。
【问题讨论】:
-
使用
CursorRecyclerAdapter,这是CursorAdapter在ListView中的近亲,如果使用自定义BaseAdapter/ArrayAdapter更好/更容易,谷歌将不会创建@987654336 @/ResourceCursorAdapter和SimpleCursorAdapter,你甚至可以在网上找到SimpleCursorRecyclerAdapter具有SimpleCursorAdapter的功能,只需google for:SimpleCursorRecyclerAdapter -
@pskink :是的,我正在使用它。但是为什么在结果集中有
_id列是强制性的。我已经有一些其他列作为主键。 -
那么
_id有什么问题?只需查询:select my_other_primary_key_column as _id, other_column, yet_another_column where ... -
@pskink:好的,没关系。但是每次调用
swapCursor()进行数据库更改不会对性能产生任何影响吗?以及如何利用 RecyclerView 的notifyItemInserted()、notifyItemRemoved()方法为更改设置动画。 -
您的数据库多久更改一次?每秒 10 次还是仅基于用户交互(新/删除/更改按钮)?
标签: android android-recyclerview simplecursoradapter