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