Menyerlahkan Teks Carian dalam RecyclerView dengan ListAdapter
Apabila menggunakan SearchView dalam Bar Alat di atas senarai RecyclerView bagi CardViews, menyerlahkan teks carian dalam CardViews menggunakan ListAdapter mungkin menghadapi masalah. CardView awal dan yang berikutnya mungkin tidak menyerlahkan teks carian dengan betul, atau penyerlahan mungkin tidak muncul sehingga menatal senarai.
Untuk menangani perkara ini, adalah penting untuk mempertimbangkan sifat ListAdapter. ListAdapter mengemas kini paparan pada urutan latar belakang, jadi set data mungkin tidak segera bersedia untuk diproses.
Dalam kod yang disediakan, isu ini berpunca daripada kaedah penapis dalam MainActivity, khususnya baris:
submitList(tempList);
Barisan ini mengalih keluar dan menggantikan item sedia ada dalam senarai. Untuk item sedia ada pada RecyclerView, ia tidak mencetuskan onBindViewHolder kerana data item tidak berubah. Oleh itu, untuk membetulkan ini, sifat searchString harus ditakrifkan sebagai sebahagian daripada model Kad.
Apabila menapis, bukannya mengubah suai model Kad sedia ada, buat model Kad baharu dengan rentetan carian yang dikemas kini:
public void setFilter(List<Card> newSearchList, String adapSearchText) { if (newSearchList != null && !newSearchList.isEmpty()) { this.searchString = adapSearchText.toLowerCase(Locale.US); ArrayList<Card> tempList = new ArrayList<>(); for (Card card : newSearchList) { tempList.add(new Card(card.getTodo(), searchString)); } submitList(tempList); } }
Dengan mencipta model Kad baharu dengan searchString yang dikemas kini, kaedah onBindViewHolder dicetuskan untuk semua item pada RecyclerView, memastikan penserlahan yang betul bagi teks carian.
Atas ialah kandungan terperinci Cara Menyerlahkan Teks yang Dicari dalam RecyclerView dengan ListAdapter: Mengapa Kadang-kadang Gagal dan Bagaimana Anda Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!