搜索功能无法正确过滤

时间:2019-10-19 11:15:13

标签: android firebase google-cloud-firestore

我试图在一项活动中实现搜索功能,以便搜索片段中设置的recyclerView。但是,当我在SearchView中更改文本时,来自recyclerView的所有元素都消失了。这是我第一次使用搜索功能,因此不知道现在该怎么做。

不知道我是否应该提及,但我使用的是Firebase Firestore。 我还应该提到我的onCreateOptionsMenu位于Fragment中,而onOptionsItemSelected()位于MainActivity中。

这是我的适配器。 event_list_full是此处的event_list的副本。

 @Override
    public Filter getFilter() {

        return eventListFilter;
    }


    private Filter eventListFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
        List<EventPost> filteredList = new ArrayList<>();
         if( charSequence == null || charSequence.length()==0){
             filteredList.addAll(event_list_full);
         } else {
             String filterPattern = charSequence.toString().toLowerCase().trim();
             for(EventPost item : event_list_full){
                 if(item.getDesc().toLowerCase().contains(filterPattern)){
                     filteredList.add(item);
                 }
             }
         }
         FilterResults filterResults = new FilterResults();
         filterResults.values = filteredList;
         return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {

            event_list.clear();
            event_list.addAll((List) filterResults.values);
            notifyDataSetChanged();

        }
    };

这是HomeFragment.java代码。我也有setHasOptionsMenu(true);在onCreateView()中。

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.main_menu, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search_button);
        SearchView searchView = (SearchView) searchItem.getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                eventRecyclerAdapter.getFilter().filter(s);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {


                return false;

            }
        });

    }

0 个答案:

没有答案