Kode Anda agak sulit dipahami karena pemformatan yang buruk.
Bagaimanapun, jawaban yang diberikan sebenarnya bukan perbaikan. Kursor kembali ke onLoadFinished
harus dijamin tidak akan ditutup, jadi Anda memuat kursor dengan cara yang salah. Khususnya, saat Anda menelepon
adapter.getFilter().filter(s.toString());
Saya tidak benar-benar mengerti apa yang terjadi di sini, tetapi saya mengerti bahwa Anda harus melakukan sesuatu yang lain. Cukup simpan filter kueri di bidang dalam Fragment
Anda dan jalankan getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Perhatikan bahwa Anda menjalankan restartLoader
, dan bukan initLoader
, karena Anda memiliki data berbeda yang ingin Anda kueri.
Di onCreateLoader
. Anda , Anda harus menggunakan filter yang Anda simpan sebagai variabel instan untuk selection
.
Beberapa latar belakang
initLoader
memuat data yang dimuat pada proses terakhir, jika telah dijalankan sebelumnya. Inilah sebabnya mengapa Anda memanggil metode inisialisasi Fragmen/Aktivitas Anda. Ini berguna karena Anda tidak perlu meminta perubahan orientasi.
restartLoader
membersihkan data yang dimuat sebelumnya sehingga Anda mendapatkan Loader
baru untuk bekerja dengan (kemungkinan) data yang berbeda.
Jika Anda masih tidak yakin dengan apa yang Anda lakukan, pastikan untuk membaca artikel ini, yang merupakan artikel pengantar yang sangat bagus tentang Loader dengan kode contoh yang sangat mirip dengan apa yang ingin Anda capai. Loader pada awalnya cukup membingungkan, tetapi setelah Anda menguasainya, semuanya berjalan lancar.