Với ListView
chúng tôi đã có một mô hình tự nhiên tốt để lập bản đồ số dữ liệu từ db để liệt kê:Làm thế nào để sử dụng ContentObserver với RecyclerView?
DB
->ContentProvider
->CursorLoader
->CursorAdapter
->ListView
Cách tiếp cận này là tốt về lớp dữ liệu tách, hiệu suất và cập nhật dữ liệu tự động. Nhưng mẫu này không thực sự phù hợp với RecyclerView
mới. Có một số phương pháp tiếp cận để bắt chước hành vi cũ:
Using the recyclerview with a database
Nhưng có một vấn đề với việc sử dụng cũ theo phong cách notifyDataSetChanged
với RecyclerView
. Nó không thể sử dụng các tính năng ItemAnimator, nó mất vị trí cuộn và nó không hiệu quả.
Vì vậy, làm thế nào chúng ta có thể hưởng lợi từ thông báo thay đổi finegraned khi sử dụng DB bọc trong ContentProvider
? Cursor
là tĩnh, và để có được dữ liệu mới từ nó, chúng ta cần phải nhận mới Cursor
. Vì vậy, có vẻ như chúng ta sẽ cần một lớp dữ liệu tùy chỉnh trung gian, mà sẽ kết hợp dữ liệu từ Cursors và vạch trần List
của đơn vị để RecyclerView.Adapter
. Ngoài ra, chúng tôi sẽ phải tự lập bản đồ ContentObserver
onChange()
sự kiện để RecyclerView thông báo. Điều này cũng có nghĩa là chúng ta sẽ phải loại bỏ CursorLoader. Đó là một số lượng đáng kinh ngạc của công việc cho nhiệm vụ cơ bản như vậy.
Có giải pháp nào tốt hơn?