【发布时间】:2015-04-24 10:09:08
【问题描述】:
使用ListView,我们有一个很好的原生模式来将一些数据从数据库映射到列表:
DB -> ContentProvider -> CursorLoader -> CursorAdapter -> ListView
这种方法在数据层分离、性能和自动数据更新方面都很好。但是这种模式并不适合新的RecyclerView。有一些方法可以模仿旧行为:
Using the recyclerview with a database
但是将旧样式 notifyDataSetChanged 与 RecyclerView 一起使用会出现问题。它不能使用 ItemAnimator 功能,它失去了滚动位置,而且它只是无效的。
那么,在使用 ContentProvider 中包装的 DB 时,我们如何从细化的更改通知中受益? Cursor 是静态的,要从中获取新数据,我们需要获取新的 Cursor。因此,我们似乎需要一个自定义的中间数据层,它将合并来自游标的数据并将实体的List 暴露给RecyclerView.Adapter。此外,我们必须手动将 ContentObserver onChange() 事件映射到 RecyclerView 通知。这也意味着我们将不得不摆脱 CursorLoader。对于这样的基本任务来说,这是一个令人难以置信的工作量。
有没有更好的解决方案?
【问题讨论】:
标签: android android-contentprovider android-recyclerview contentobserver