Heim > Java > javaLernprogramm > Hauptteil

Wie behebt man Probleme mit der Hervorhebung von ForegroundColorSpan-Suchtext in RecyclerView mit ListAdapter?

Patricia Arquette
Freigeben: 2024-11-12 19:37:01
Original
992 Leute haben es durchsucht

How to Fix ForegroundColorSpan Search Text Highlighting Issues in RecyclerView with ListAdapter?

Android: Beheben von Problemen beim Hervorheben von ForegroundColorSpan-Suchtext mit RecyclerView und ListAdapter

Das Hervorheben von Suchtext in einem RecyclerView kann eine Herausforderung sein, insbesondere wenn ListAdapter verwendet wird . Um dieses Problem zu beheben, untersuchen wir eine mögliche Lösung, um sicherzustellen, dass Suchtext mithilfe eines benutzerdefinierten ListAdapters korrekt hervorgehoben wird.

Das Problem tritt auf, wenn „submitList()“ zum Aktualisieren des Datensatzes im ListAdapter verwendet wird. Elemente werden zwar ordnungsgemäß aus der Liste entfernt, onBindViewHolder() wird jedoch nicht für vorhandene Elemente ausgelöst, da deren Daten unverändert bleiben. Dies führt dazu, dass der Hervorhebungsmechanismus für diese Elemente nicht wie vorgesehen funktioniert.

Lösung:

Um dieses Problem zu beheben, müssen wir die Filterlogik ändern, um eine neue Karte zu erstellen Modelle mit aktualisierten Suchzeichenfolgen, anstatt die vorhandenen Modelle direkt zu ändern. Hier ist der überarbeitete Code 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))) {                    
            Card updatedCard = new Card(cardItem.getTodo(), searchText);
            searchList.add(updatedCard);
        }
    }  
    if (!searchList.isEmpty()) {  
        adapter.setFilter(searchList);
}
Nach dem Login kopieren

Durch die Erstellung neuer Karteninstanzen mit aktualisierten Suchzeichenfolgen erzwingen wir, dass der ListAdapter onBindViewHolder() für betroffene Elemente auslöst, um sicherzustellen, dass der Hervorhebungsmechanismus ordnungsgemäß funktioniert.

Aktualisierter ListAdapter:

Im ListAdapter entfernen wir die searchString-Eigenschaft als es ist nicht mehr notwendig. Stattdessen sind die Suchzeichenfolgeninformationen im Kartenmodell enthalten. Die bindData()-Methode sollte nun wie folgt aussehen:

void bindData(Card card) {
    spannable = Spannable.Factory.getInstance().newSpannable(cardBlankText2.getText().toString());

    // Get any previous spans and remove them
    ForegroundColorSpan[] foregroundSpans = spannable.getSpans(0,spannable.length(), ForegroundColorSpan.class);

    // Highlight matches from search characters is Green color.
    if (card.getSearchText() != null) {
        int start = cardBlankText2.getText().toString().toLowerCase(Locale.US).indexOf(card.getSearchText().toLowerCase(Locale.US));
        int end = start + card.getSearchText().length();
        if (start != -1) {
            spannable.setSpan(getFCS(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        cardBlankText2.setText(spannable, TextView.BufferType.SPANNABLE);
    }    
}
Nach dem Login kopieren

Mit diesen Änderungen sollte die Suchtext-Hervorhebungsfunktion in RecyclerView wie erwartet funktionieren und sicherstellen, dass jedes Vorkommen der Suchzeichenfolge entsprechend hervorgehoben wird.

Das obige ist der detaillierte Inhalt vonWie behebt man Probleme mit der Hervorhebung von ForegroundColorSpan-Suchtext in RecyclerView mit ListAdapter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage