使用 ListAdapter 在 RecyclerView 中突出显示搜索文本
在 CardView 的 RecyclerView 列表上方的工具栏中使用 SearchView 时,突出显示其中的搜索文本使用 ListAdapter 的 CardView 可能会遇到问题。初始的 CardView 和后续的 CardView 可能无法正确突出显示搜索文本,或者在滚动列表之前可能不会出现突出显示。
要解决此问题,重要的是要考虑 ListAdapter 的性质。 ListAdapter 在后台线程上更新视图,因此数据集可能无法立即准备好处理。
在提供的代码中,问题源于 MainActivity 中的过滤方法,特别是行:
submitList(tempList);
此行删除并替换列表中的现有项目。对于RecyclerView上现有的item,它不会触发onBindViewHolder,因为item的数据不会改变。因此,要纠正此问题,应将 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 创建新的 Card 模型,RecyclerView 上的所有项目都会触发 onBindViewHolder 方法,确保搜索正确突出显示文字。
以上是如何使用 ListAdapter 在 RecyclerView 中突出显示搜索到的文本:为什么有时会失败以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!