SearchView无法正常工作

时间:2016-01-22 19:35:32

标签: android searchview

我的片段中有一个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

in my second image you can see that now am not getting any results (but the String contains what am searching for)

这就是我在我的适配器类

中创建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;

                                           }
                                       });

如果有人知道我做错了什么,请帮助我,从昨天开始坚持到这里

1 个答案:

答案 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);
                }
            }
        }