ホームページ > Java > &#&チュートリアル > ListAdapter を使用して RecyclerView で検索されたテキストを強調表示する方法: 時々失敗する理由とその修正方法

ListAdapter を使用して RecyclerView で検索されたテキストを強調表示する方法: 時々失敗する理由とその修正方法

Susan Sarandon
リリース: 2024-11-25 12:32:11
オリジナル
598 人が閲覧しました

How to Highlight Searched Text in RecyclerView with ListAdapter: Why Does It Sometimes Fail and How Can You Fix It?

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

CardView の RecyclerView リストの上にあるツールバー内で SearchView を使用する場合、その中の検索テキストを強調表示します。 ListAdapter を使用する CardView で問題が発生する可能性があります。最初の CardView とそれ以降の CardView では、検索テキストが正しく強調表示されないか、リストをスクロールするまで強調表示されない場合があります。

これに対処するには、ListAdapter の性質を考慮することが重要です。 ListAdapter はバックグラウンド スレッドでビューを更新するため、データセットをすぐに処理できる状態にならない可能性があります。

提供されたコードでは、問題は MainActivity のフィルター メソッド、具体的には次の行に起因しています。

submitList(tempList);
ログイン後にコピー

この行は、リスト内の既存の項目を削除して置き換えます。 RecyclerView 上の既存のアイテムの場合、アイテムのデータは変更されないため、onBindViewHolder はトリガーされません。したがって、これを修正するには、searchString プロパティを Card モデルの一部として定義する必要があります。

フィルタリングする場合、既存の Card モデルを変更する代わりに、更新された検索文字列を使用して新しい Card モデルを作成します。

public void setFilter(List<Card> newSearchList, String adapSearchText) {

    if (newSearchList != null && !newSearchList.isEmpty()) {
        this.searchString = adapSearchText.toLowerCase(Locale.US);
        ArrayList<Card> tempList = new ArrayList<>();
        for (Card card : newSearchList) {
            tempList.add(new Card(card.getTodo(), searchString));
        }
        submitList(tempList);
    }
}
ログイン後にコピー

更新された searchString を使用して新しいカード モデルを作成すると、RecyclerView 上のすべての項目に対して onBindViewHolder メソッドがトリガーされ、検索が正しく強調表示されるようになります。テキスト。

以上がListAdapter を使用して RecyclerView で検索されたテキストを強調表示する方法: 時々失敗する理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート