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 サイトの他の関連記事を参照してください。