首頁 > Java > java教程 > 主體

如何使用ListAdapter保證RecyclerView中準確的搜尋文字高亮?

Mary-Kate Olsen
發布: 2024-11-22 05:12:21
原創
958 人瀏覽過

How to Ensure Accurate Search Text Highlighting in RecyclerView with ListAdapter?

使用ListAdapter 修正RecyclerView 中的搜尋文字突出顯示

當將View 與由ListAdapter 提供支援的RecyclerView 一起使用時,正確突出顯示搜尋至關重要結果。但是,會出現一個常見問題,即清單中的第一個 CardView 或下面的其他視圖可能不會突出顯示搜尋文本,或突​​出顯示不一致。

此行為的原因在於 ListAdapter 用於更新視圖的後台線程,可能會導致資料集在初始渲染期間不可用。要解決此問題,請考慮採取以下措施:

  • 使用項目比較: 確保比較提交的清單以確定哪些項目已更改,從而觸發適當的視圖更新。
  • 修改 Card 模型: 為 Card 模型引入 searchString 屬性。過濾時,使用更新的搜尋字串建立新的 Card 實例。這會觸發完整的資料更改,迫使 ListAdapter 為每個現有項目呼叫 onBindViewHolder()。

範例程式碼

// In the ListAdapter
public class CardRVAdapter extends ListAdapter<Card, CardRVAdapter.ViewHolder> {

    private String searchString = "";

    public void setFilter(List<Card> newSearchList, String searchText) {
        if (newSearchList != null && !newSearchList.isEmpty()) {
            this.searchString = searchText;
            List<Card> filteredList = new ArrayList<>();
            for (Card card : newSearchList) {
                Card newCard = new Card(card);
                newCard.setSearchString(searchText);
                filteredList.add(newCard);
            }
            submitList(filteredList);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        final Card card = getCardAt(position);
        if (card != null) {
            holder.bindData(card, position);
        }
    }
}

// In the Card model
public class Card {

    private String searchString;

    public Card(String todo, String searchString) {
        // Constructor with both original todo and search string
    }

    public String getSearchString() {
        return searchString;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }
}
登入後複製

透過實作這些更改,無論捲動還是初始渲染,您都可以使用ListAdapter 精確地突出顯示RecyclerView 中的搜尋文字.

以上是如何使用ListAdapter保證RecyclerView中準確的搜尋文字高亮?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板