8

Ứng dụng có dữ liệu trong cơ sở dữ liệu SQLite. Giao diện người dùng chủ yếu là RecyclerView. Câu hỏi đặt ra là làm cách nào tốt nhất để chuyển dữ liệu từ cơ sở dữ liệu sang giao diện người dùng, trong khi vẫn giữ nguyên chuỗi chính?Dữ liệu SQLite vào RecyclerView

Tôi đã lên kế hoạch ban đầu để sử dụng CursorLoader, ContentProvider và RecyclerView. Nhưng đọc xung quanh có vẻ như RecyclerView không có hỗ trợ out-of-the-box cho dữ liệu do Cursor cung cấp. Dang.

Đó sau đó rời khỏi tôi với một vài lựa chọn khác ...

  1. AsyncTask để tải các dữ liệu, đặt nó vào đối tượng mô hình, và thông qua vào Adaptor RecyclerView. Ngoài việc xấu xí, nó không phải là cấu hình thay đổi thân thiện.

  2. Trình tải tùy chỉnh tải dữ liệu từ SQL và đẩy nó vào đối tượng mô hình.

  3. Sử dụng bộ nạp Con trỏ và khi nó trả về Con trỏ lặp qua nó để đẩy dữ liệu vào đối tượng mô hình. Tôi nghi ngờ điều này sẽ xảy ra trên các chủ đề chính và có thể làm hỏng hiệu suất.

  4. Sử dụng Otto để gửi tin nhắn yêu cầu để yêu cầu dữ liệu và sau đó trả về bộ sưu tập đối tượng mô hình bằng tin nhắn trả về. Có thể có ~ 500 đồ vật nên tôi nghĩ tôi có thể lạm dụng Otto để làm điều này.

Nếu tôi đang sử dụng một tập hợp các mô hình đối tượng thay vì một con trỏ tôi thấy ít lợi ích cho một ContentProvider, và tôi cũng mất khả năng cho giao diện người dùng để tự động refresh trên thay đổi dữ liệu (có thể là hữu ích) .

Không có tùy chọn nào trong số này hấp dẫn nhiều, có cách nào tốt hơn không? Các ứng dụng đang chịu áp lực thời gian vì vậy bất cứ điều gì nó cần phải được khá nhanh chóng để thực hiện. Thật không may là giao diện người dùng cần phải cuộn theo chiều ngang và chỉ nhắm mục tiêu Lollipop, vì vậy RecyclerView dường như đặt cược tốt hơn so với ListView.

+0

Tôi sử dụng phương pháp 3 trong một trong các ứng dụng của tôi và trong onLoadFinished tôi sinh ra một chuỗi mới tạo ra các đối tượng mô hình từ dữ liệu. Tôi chưa gặp sự cố với phương pháp này chưa – tyczj

+1

Xem https://gist.github.com/Shywim/127f207e7248fe48400b và vui lòng không lặp lại qua con trỏ, nó có ít ý nghĩa và như bạn đã nói nó làm giảm hiệu suất – pskink

+0

Bạn sẽ không có thể lấy con trỏ và đẩy nó vào một nhiệm vụ khác? Vẫn không mong muốn của khóa học. –

Trả lời

5

sử dụng bộ chuyển đổi đơn giản này https://gist.github.com/Shywim/127f207e7248fe48400b, cách khác bạn có thể sử dụng android.support.v17.leanback.widget.ItemBridgeAdapter với android.support.v17.leanback.widget.CursorObjectAdapter nhưng tại sao để làm cho cuộc sống của riêng khó?

Các vấn đề liên quan