我在应用程序项目中添加了一个带有listview的搜索视图。
我有一个问题,即搜索视图忽略所有大写字母,例如:
当我键入";pple";在searchviw中,列表视图显示了Apple行。但当我输入苹果或苹果时,它找不到苹果。当我将字符串从Apple更改为Apple时,它在我键入Apple时有效,但在我键入Appel时无效。。。
我希望我现在没有把它变得复杂:D
我使用以下过滤代码:
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint == null || constraint.length() == 0){
filterResults.count = itemsModelsl.size();
filterResults.values = itemsModelsl;
}else{
List<itemsmodel> resultsModel = new ArrayList<>();
String searchStr = constraint.toString().toLowerCase();
for(ItemsModel itemsModel:itemsModelsl){
if(itemsModel.getName().contains(searchStr) || itemsModel.getEmail().contains(searchStr)){
resultsModel.add(itemsModel);
filterResults.count = resultsModel.size();
filterResults.values = resultsModel;
}
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
itemsModelListFiltered = (List<itemsmodel>) results.values;
notifyDataSetChanged();
}
};
return filter;
}
如果您需要更多代码,请告诉我。
提前谢谢。
BgDaniel
这是因为您降低了搜索输入的大小写,但没有降低项目名称本身的大小写。因此,当您键入"Apple"/"apple"
时,搜索输入实际上只是小写版本:"apple"
。另一方面,项目的名称是"Apple"
,因此无法匹配。
尝试:
...
if (itemsModel.getName().toLowerCase().contains(searchStr) || itemsModel.getEmail().toLowerCase().contains(searchStr)) {
...
}
...