1 menjawab

Jawaban Terbaik

Saya dapat memberi tahu Anda apa yang telah saya lakukan ... A. Memuat kursor menggunakan Loader. B. Menyalin kursor ke dalam daftar array yang terpasang pada adaptor (kursor tidak terpasang ke adaptor secara langsung), tutup kursor. Bekerja dengan baik jika tidak ada banyak data - jika ada banyak baris maka saya akan memuat sebagian ke daftar array dan kemudian ketika pengguna akan menggulir ke bawah saya akan meminta lagi dan memuat dari baris terakhir dari array. C. Ketika pengguna ingin menghapus atau menambahkan sesuatu, saya akan melakukan operasi pada arrayList terlebih dahulu (UI thread) notifiyItemChanged dan kemudian mengubah db (Back thread) Semoga saya membantu.

4
EE66 27 Mei 2015, 15:43
Saya mempertimbangkan pemikiran yang sama dengan Anda, tetapi itu bukan metode terbaik. Pertama, CursorLoader dirancang untuk menyegarkan data yang dapat berubah sewaktu-waktu. Dalam situasi saya, saya tahu kapan harus me-refresh data dan UI jadi jika saya menggunakan CursorLoader, utas lain akan dibuat dan dengan demikian membuang sumber daya. Kedua, tampaknya mudah untuk menyalin data dari kursor ke arrayList tetapi memiliki masalah yang sama: pemborosan memori karena arrayList sebenarnya tidak diperlukan di sini----mengapa saya harus menggunakan arrayList jika ada kursor untuk menyediakan data? Akhirnya, Langkah C dapat menyebabkan kesalahan.
 – 
ywwynm
27 Mei 2015, 17:48
Saya akan mulai dari akhir, langkah c tidak menyebabkan kesalahan jika dilakukan dengan benar. saya telah menyalin array karena saya ingin memiliki fitur 'swipe do delete' dan saya benar-benar tidak suka melakukan perubahan apa pun pada DB di utas utama. Ini mungkin 'buang-buang' memori (mungkin) tetapi efisien dengan penggunaan UI. Sekali lagi, saya pikir array lain di sana-sini BANYAK lebih murah daripada menghapus baris di DB di UI.
 – 
EE66
27 Mei 2015, 17:49
Saya akan menerima saran Anda. Tapi saya memikirkan sesuatu yang baru: memuat kursor, menyalin data ke arrayList di onCreate() Aktivitas dan mengikatnya dengan RecyclerView.Adapter. Kemudian ketika saya ingin mengubah data pada utas UI, saya hanya memperbarui arrayList. Pada akhirnya, di Activity's onStop(), saya akan memasukkan semua data arrayList ke dalam database (masukkan yang baru, perbarui yang diubah dan pertahankan yang sudah ada). Apakah lebih baik?
 – 
ywwynm
28 Mei 2015, 05:16
Idenya bagus selama Anda melakukan semua pekerjaan berat pada benang belakang. sebuah. onCreate() dipanggil di UI dan menyalin data di dalamnya bukanlah ide yang bagus. B. gunakan loader, muat data ke kursor lalu salin (pada metode loadBackground() di loader). C. Jika Anda menggunakan data yang sama pada aktivitas induk, itu akan menjadi masalah.
 – 
EE66
28 Mei 2015, 13:02