С ListView
мы имели хороший родной шаблон для отображения некоторых данных из БД в список:Как использовать ContentObserver с RecyclerView?
DB
->ContentProvider
->CursorLoader
->CursorAdapter
->ListView
Этот подход был хорош с точки зрения уровня данных разделение, производительность и автоматические обновления данных. Но этот шаблон не подходит для нового RecyclerView
. Есть несколько подходов к имитируют старое поведение:
Using the recyclerview with a database
Но есть проблема с использованием старого стиля notifyDataSetChanged
RecyclerView
с. Он не может использовать функции ItemAnimator, он теряет положение прокрутки, и он просто неэффективен.
Итак, как мы можем извлечь выгоду из уведомлений об изменении размера при использовании DB, завернутых в ContentProvider
? Cursor
статичен, и для получения новых данных нам нужно получить новый Cursor
. Таким образом, нам кажется, что нам понадобится пользовательский промежуточный уровень данных, который объединит данные из Cursors и выведет List
объектов на RecyclerView.Adapter
. Кроме того, нам нужно вручную отобразить ContentObserver
onChange()
событий для уведомлений RecyclerView. Это также означает, что нам придется избавиться от CursorLoader. Это невероятная работа для такой основной задачи.
Есть ли лучшее решение?