首页  >  文章  >  Java  >  如何使用 ListAdapter 在 RecyclerView 中突出显示搜索到的文本:为什么有时会失败以及如何修复它?

如何使用 ListAdapter 在 RecyclerView 中突出显示搜索到的文本:为什么有时会失败以及如何修复它?

Susan Sarandon
Susan Sarandon原创
2024-11-25 12:32:11550浏览

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上现有的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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn