Maison >Java >javaDidacticiel >Comment mettre en surbrillance le texte recherché dans RecyclerView avec ListAdapter : pourquoi cela échoue-t-il parfois et comment pouvez-vous y remédier ?
Mise en surbrillance du texte recherché dans RecyclerView avec ListAdapter
Lors de l'utilisation d'un SearchView dans une barre d'outils au-dessus d'une liste RecyclerView de CardViews, mise en surbrillance du texte recherché dans les CardViews utilisant ListAdapter peuvent rencontrer des problèmes. Le CardView initial et les suivants peuvent ne pas mettre en évidence correctement le texte de recherche, ou la mise en surbrillance peut ne pas apparaître avant le défilement de la liste.
Pour résoudre ce problème, il est important de considérer la nature de ListAdapter. ListAdapter met à jour les vues sur un thread d'arrière-plan, de sorte que l'ensemble de données peut ne pas être immédiatement prêt à être traité.
Dans le code fourni, le problème provient de la méthode de filtrage dans MainActivity, en particulier de la ligne :
submitList(tempList);
Cette ligne supprime et remplace les éléments existants dans la liste. Pour les éléments existants sur RecyclerView, cela ne déclenche pas onBindViewHolder car les données de l'élément ne changent pas. Par conséquent, pour corriger cela, la propriété searchString doit être définie dans le cadre du modèle Card.
Lors du filtrage, au lieu de modifier le modèle Card existant, créez un nouveau modèle Card avec la chaîne de recherche mise à jour :
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); } }
En créant de nouveaux modèles de cartes avec la searchString mise à jour, la méthode onBindViewHolder est déclenchée pour tous les éléments du RecyclerView, garantissant une mise en évidence correcte de la recherche. texte.
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!