【问题标题】:Is it better to fetch data from database and put into ArrayList before binding it to RecyclerView?在将数据绑定到 RecyclerView 之前从数据库中获取数据并放入 ArrayList 是否更好?
【发布时间】:2016-07-21 15:27:43
【问题描述】:

我想使用数据库填充 RecyclerView。由于目前没有用于使用数据库填充 RecyclerView 的内置适配器,因此我使用了 Shywim 的 CursorRecyclerAdapter。我创建了一个示例应用程序来测试它,它运行良好。我不喜欢的功能是在结果集中有一个_id 列,并在每个数据库操作上调用swapCursor(),主要是插入和删除。这与使用SimpleCursorAdapter 时的ListView 相同。我的查询是如果我使用 ArrayList 作为数据集而不是直接使用 Cursor。

这样做的好处(我的假设):

  1. 结果集中不再需要_id 列。

  2. 可以从数据库中取出数据,放入ArrayList并关闭游标。

  3. 无需在每个数据库操作上调用 swapCursor(),因为我可以从 ArrayList 中添加/删除指定元素并调用 notifyDataSetChanged()

    我不知道swapCursor()notifyDataSetChanged() 背后的确切逻辑。所以,不能决定哪一个是轻量级和高效的。

如果有人曾经经历过或曾经这样做过,请消除我的疑虑。欢迎任何更正和建议。

【问题讨论】:

  • 使用CursorRecyclerAdapter,这是CursorAdapterListView 中的近亲,如果使用自定义BaseAdapter / ArrayAdapter 更好/更容易,谷歌将不会创建@987654336 @/ResourceCursorAdapterSimpleCursorAdapter,你甚至可以在网上找到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


【解决方案1】:

根据我的理解,使用数组列表和自定义适配器是更好的方法。

请看下面的一些场景:

1) 每次交易后光标都会关闭,这样数据库才能顺利运行。

2) 因为您可以在操作完成时关闭光标,所以它永远不会产生光标未关闭异常。

3)您可以轻松修改每一行的视图并根据您的选择管理自定义适配器。

还有很多其他原因,但总而言之,根据我的理解,自定义适配器比光标适配器更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2013-09-12
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2015-04-01
    • 2020-03-21
    相关资源
    最近更新 更多