Search through RecyclerView using Searchview

前端 未结 5 411
谎友^
谎友^ 2020-12-16 23:31

I want to search through RecyclerView, I have List (BaseOfCards is my getter&setter class) My RecyclerViewAdapter<

5条回答
  •  悲&欢浪女
    2020-12-17 00:09

    In your adapter class extend filterable. Then override the public Filter getFilter().

       @Override
        public Filter getFilter() {
            Filter filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence charSequence) {
                    FilterResults filterResults = new FilterResults();
    
                    if(charSequence == null | charSequence.length() == 0){
                        filterResults.count = getUserModelListFiltered.size();
                        filterResults.values = getUserModelListFiltered;
    
                    }else{
                        String searchChr = charSequence.toString().toLowerCase();
    
                        List resultData = new ArrayList<>();
    
                        for(UserModel userModel: getUserModelListFiltered){
                            if(userModel.getUserName().toLowerCase().contains(searchChr)){
                                resultData.add(userModel);
                            }
                        }
                        filterResults.count = resultData.size();
                        filterResults.values = resultData;
    
                    }
    
                    return filterResults;
                }
    
                @Override
                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
    
                    userModelList = (List) filterResults.values;
                    notifyDataSetChanged();
    
                }
            };
            return filter;
          }
    

    in your main activity add search view and listener to onQueryTextChange.

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
    
        MenuItem menuItem = menu.findItem(R.id.search_view);
    
        SearchView searchView = (SearchView) menuItem.getActionView();
    
        searchView.setMaxWidth(Integer.MAX_VALUE);
    
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }
    
            @Override
            public boolean onQueryTextChange(String newText) {
    
                usersAdapter.getFilter().filter(newText);
                return true;
            }
        });
    
    
    
        return  true;
    }
    

    Full tutorial and source code. Recyclerview with SearchView

提交回复
热议问题