使用 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中文网其他相关文章!