ホームページ > Java > &#&チュートリアル > RecyclerView と ListAdapter で ForegroundColorSpan 検索テキストの強調表示が一致しないのはなぜですか?

RecyclerView と ListAdapter で ForegroundColorSpan 検索テキストの強調表示が一致しないのはなぜですか?

DDD
リリース: 2024-11-13 08:18:02
オリジナル
994 人が閲覧しました

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

RecyclerView と ListAdapter による ForegroundColorSpan 検索テキストの強調表示を修正

問題

による検索テキストの強調表示ForegroundColorSpan を使用する Color.GREEN は、ListAdapter を使用する RecyclerView 内で一貫性がありません。リスト内の一部の項目が強調表示されていないか、スクロール後にのみ強調表示されます。

原因

ListAdapter は非同期更新を使用しており、onBindViewHolder() のときにデータセットの準備ができていない可能性があります。と呼ばれます。その結果、強調表示を正しく適用するために searchString を使用できません。

解決策

カード モデルを更新して、searchString プロパティを含めます。フィルタリング中に、更新された searchString を使用して新しい Card インスタンスを作成します。これにより、onBindViewHolder() メソッドがトリガーされ、強調表示が正しく適用されます。

// 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);
    }
}
ログイン後にコピー

以上がRecyclerView と ListAdapter で ForegroundColorSpan 検索テキストの強調表示が一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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