android 搜索功能 SearchView+RecyclerView实现 搜索结果高亮显示
时间: 2023-11-16 21:51:49 浏览: 176
你可以使用SearchView和RecyclerView来实现Android中的搜索功能,并且在搜索结果中高亮显示匹配的文本。下面是实现的简要步骤:
1. 首先,在你的布局文件中添加SearchView和RecyclerView。
2. 在Activity或Fragment中,找到SearchView并设置搜索监听器。在监听器的onQueryTextChange方法中,获取用户输入的搜索关键字,并更新RecyclerView的数据源。
3. 在RecyclerView的Adapter中,实现一个过滤方法来根据搜索关键字过滤数据源。这个过滤方法可以使用String类的contains方法来判断是否存在匹配的文本。
4. 在过滤方法中,你可以使用SpannableString类来对匹配的文本进行高亮处理。使用ForegroundColorSpan类来设置高亮文本的颜色。
这是一个简单的示例代码,帮助你更好地理解:
```java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataList;
private List<String> filteredDataList;
private String searchText;
// Adapter构造函数和其他方法...
public void filter(String text) {
searchText = text.toLowerCase();
filteredDataList.clear();
if (searchText.isEmpty()) {
filteredDataList.addAll(dataList);
} else {
for (String item : dataList) {
if (item.toLowerCase().contains(searchText)) {
filteredDataList.add(item);
}
}
}
notifyDataSetChanged();
}
// ViewHolder和其他方法的实现...
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String item = filteredDataList.get(position);
// 高亮处理
if (!searchText.isEmpty()) {
int startPos = item.toLowerCase().indexOf(searchText);
int endPos = startPos + searchText.length();
if (startPos != -1) {
SpannableString spannableString = new SpannableString(item);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(colorSpan, startPos, endPos, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.textView.setText(spannableString);
} else {
holder.textView.setText(item);
}
} else {
holder.textView.setText(item);
}
}
}
```
这只是一个简单的示例,你可以根据实际需求进行修改和扩展。希望对你有所帮助!
阅读全文