2012-04-13 25 views
19

Tôi đã cập nhật Android SDK của mình lên phiên bản mới nhất và giờ nó cho biết startManagingCursor()deprecated. Tôi cần trợ giúp để cập nhật mã của mình để sử dụng CursorLoader mới.Cách chuyển (đúng) từ startManagingCursor sang CursorLoader?

private void fillData() { 
    Cursor notesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(notesCursor); 
    NoteAdapter notes = new NoteAdapter(this, R.layout.notes_row, notesCursor); 
    setListAdapter(notes); 
} 

Vì vậy, startManagingCursor() cũ, mã mới sẽ như thế nào, nếu nó được dịch?

+1

CursorLoader hoạt động trong adition đối với ContentProvider ... Vì vậy, không thể "dịch" mã rhis .... – Selvin

+0

http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background. html – user1422551

+0

Tốt để ghi nhớ câu trả lời này cho phương pháp khấu hao. Hóa ra nó chạy trên sợi chính, làm chậm mọi thứ xuống, đó là lý do tại sao nó bị khấu hao. [link] (http://stackoverflow.com/questions/19651680/cursorloader-with-startmanagingcursor) – Azurespot

Trả lời

16

Đầu tiên, startManagingCursor() vẫn hoạt động. Nó không phải là lý tưởng, trong đó nó thực hiện cơ sở dữ liệu I/O trên thread ứng dụng chính. Trong Android, "không dùng nữa" thường có nghĩa là "chúng tôi có thứ gì đó khác mà chúng tôi nghĩ là tốt hơn mà chúng tôi khuyên bạn nên sử dụng". Vì vậy, khi nó có ý nghĩa trong chu kỳ phát triển của ứng dụng của bạn, bạn nên xem xét di chuyển.

Thứ hai, như Selvin đã lưu ý, SDK chỉ cung cấp triển khai Loader cho số ContentProvider. Tôi có trực tiếp a project that offers a Loader for SQLite.

Thứ ba, thực sự không có "dịch" thẳng cho mã của bạn. Khung Loader là không đồng bộ và hướng sự kiện, trong khi mã của bạn thì không.

Nói chung, bạn Loader sẽ chịu trách nhiệm cho việc lấy các ghi chú, và bạn sẽ cư của bạn ListView trong onLoadFinished(), khi bạn đang giao Cursor từ Loader.

+2

Chỉ cần thêm một ý tưởng ở đây, nếu bạn đang xây dựng mã MỚI, bạn sẽ không bao giờ sử dụng API không dùng nữa. –

+22

@EthanAllen: Vô nghĩa. Để bắt đầu, nó không thể nếu bạn muốn hỗ trợ các thiết bị cũ hơn. Ví dụ: bạn không thể tạo 'PreferenceActivity' hoạt động trên API cấp 10 trở xuống mà không sử dụng các phương thức không được chấp nhận. Cảnh báo ngừng sử dụng cần được xem xét theo từng trường hợp cụ thể. * Nói chung * bạn muốn tránh các phương pháp không dùng nữa nếu có thể. Nhưng "không bao giờ" là phóng đại vụ án. – CommonsWare

+0

phân tích tuyệt vời. CẬP NHẬT! –

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