Correction de la mise en surbrillance du texte de recherche ForegroundColorSpan avec RecyclerView et ListAdapter
Problème
Mise en surbrillance du texte de recherche avec Color.GREEN utilisant ForegroundColorSpan est incohérent dans un RecyclerView utilisant ListAdapter. Certains éléments de la liste ne sont pas mis en surbrillance, ou uniquement après le défilement.
Cause
ListAdapter utilise des mises à jour asynchrones et l'ensemble de données peut ne pas être prêt lorsque onBindViewHolder() est appelé. Par conséquent, le searchString n'est pas disponible pour appliquer correctement la mise en évidence.
Solution
Mettez à jour le modèle de carte pour inclure la propriété searchString. Pendant le filtrage, créez une nouvelle instance de Card avec la searchString mise à jour. Cela déclenchera la méthode onBindViewHolder() et appliquera correctement la mise en évidence.
// In MainActivity private void filter(String searchText) { ArrayList<Card> searchList = new ArrayList<>(); for (Card cardItem : mCards) { if (cardItem.getTodo().toLowerCase().contains(searchText.toLowerCase(Locale.US))) { searchList.add(new Card(cardItem.getTodo(), searchText)); // Create a new Card with updated searchString } } if (!searchList.isEmpty()) { adapter.submitList(searchList); // Submit the new Card list } }
// In CardRVAdapter public void setFilter(List<Card> newSearchList, String adapSearchText) { if (newSearchList != null && !newSearchList.isEmpty()) { ArrayList<Card> tempList = new ArrayList<>(newSearchList); submitList(tempList); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!