ForegroundColorSpan-Suchtexthervorhebung mit RecyclerView und ListAdapter beheben
Problem
Hervorhebung von Suchtext mit Color.GREEN, das ForegroundColorSpan verwendet, ist in einer RecyclerView, die ListAdapter verwendet, inkonsistent. Einige Elemente in der Liste werden nicht oder erst nach dem Scrollen hervorgehoben.
Ursache
ListAdapter verwendet asynchrone Aktualisierungen und der Datensatz ist möglicherweise nicht bereit, wenn onBindViewHolder() heißt. Daher ist der Suchstring nicht verfügbar, um die Hervorhebung korrekt anzuwenden.
Lösung
Aktualisieren Sie das Kartenmodell, um die Eigenschaft searchString einzuschließen. Erstellen Sie während des Filterns eine neue Karteninstanz mit dem aktualisierten searchString. Dadurch wird die Methode onBindViewHolder() ausgelöst und die Hervorhebung korrekt angewendet.
// 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); } }
Das obige ist der detaillierte Inhalt vonWarum ist die ForegroundColorSpan-Suchtexthervorhebung in RecyclerView mit ListAdapter inkonsistent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!