ホームページ >Java >&#&チュートリアル >ListAdapter を使用して RecyclerView で正確な検索テキストを強調表示する方法

ListAdapter を使用して RecyclerView で正確な検索テキストを強調表示する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-22 05:12:211007ブラウズ

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

ListAdapter を使用した RecyclerView での検索テキストの強調表示の修正

ListAdapter を利用した RecyclerView で SearchView を使用する場合、検索を適切に強調表示することが重要です結果。ただし、リスト内の最初の CardView またはその下にある他の CardView が検索テキストを強調表示しない、または強調表示が一貫して行われないという一般的な問題が発生します。

この動作の理由は、ListAdapter がビューを更新するために使用するバックグラウンド スレッドにあります。そのため、最初のレンダリング中にデータセットが使用できなくなる可能性があります。これを解決するには、次の対策を検討してください:

  • アイテムの差分を使用する: 送信されたリストを比較してどのアイテムが変更されたかを確認し、適切なビューの更新をトリガーします。
  • カード モデルを変更します: カード モデルに 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。