我的片段中有一个SearchView和一个RecyclerView,我创建了一个getFilter
方法来添加搜索功能,但我的问题是SearchView
无效,因为我应该面对两个问题在下面解释
1 - 假设我有一个要搜索的数据
{String1,String two,String three}如果我输入s
,那么我只得到结果String1
表示我根据我的字符串的最后一个字得到结果
请参阅图片以了解我想要解释的内容
in this image you can see am getting the result according to the last word of my String
这就是我在我的适配器类
中创建GetFilter
的方法
private static class UserFilter extends Filter {
private final NotesAdapter adapter;
private final List<Information> originalList;
private final List<Information> filteredList;
private UserFilter(NotesAdapter adapter, List<Information> originalList) {
super();
this.adapter = adapter;
this.originalList = new LinkedList<>(originalList);
this.filteredList = new ArrayList<>();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(originalList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (final Information user : originalList) {
if (user.title.contains(filterPattern)) {
filteredList.add(user);
}
}
}
results.values = filteredList;
results.count = filteredList.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapter.filteredUserList.clear();
adapter.filteredUserList.addAll((ArrayList<Information>) results.values);
adapter.notifyDataSetChanged();
} }
这就是我在片段中使用此方法的方法
Search_View.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String Text) {
Log.v(""+Text , " searchView TextSubmit" );
Log.d("tag", "notesAdapter=" + notesAdapter);
notesAdapter.getFilter().filter(Text);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
Log.v(""+newText , " searchView TextChange" );
Log.d("tag", "notesAdapter=" + notesAdapter);
notesAdapter.getFilter().filter(newText);
return true;
}
});
如果有人知道我做错了什么,请帮助我,从昨天开始坚持到这里
答案 0 :(得分:0)
错过了将我的user.title
转换为小写
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(originalList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (final Information user : originalList) {
if (user.title.toLowerCase().contains(filterPattern)) {
filteredList.add(user);
}
}
}