Heim  >  Artikel  >  Java  >  Warum ist die ForegroundColorSpan-Suchtexthervorhebung in RecyclerView mit ListAdapter inkonsistent?

Warum ist die ForegroundColorSpan-Suchtexthervorhebung in RecyclerView mit ListAdapter inkonsistent?

DDD
DDDOriginal
2024-11-13 08:18:02916Durchsuche

Why is ForegroundColorSpan Search Text Highlighting Inconsistent in RecyclerView with ListAdapter?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn