首页 > Java > java教程 > 为什么 RecyclerView 和 ListAdapter 中 ForegroundColorSpan 搜索文本高亮不一致?

为什么 RecyclerView 和 ListAdapter 中 ForegroundColorSpan 搜索文本高亮不一致?

DDD
发布: 2024-11-13 08:18:02
原创
975 人浏览过

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

使用 RecyclerView 和 ListAdapter 修复 ForegroundColorSpan 搜索文本突出显示

问题

使用以下命令突出显示搜索文本使用 ForegroundColorSpan 的 Color.GREEN 与使用 ListAdapter 的 RecyclerView 不一致。列表中有些项目没有高亮,或者滚动后才高亮。

原因

ListAdapter 使用异步更新,onBindViewHolder() 时数据集可能尚未准备好被称为。因此,searchString 无法正确应用突出显示。

解决方案

更新 Card 模型以包含 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板