Search code examples
androidandroid-toolbarsearchviewandroid-search

How to make search view with modal in Android


I want to make a searchView like this image below. The searchView is received data from local database then it filters data like AutoCompleteTextView. How can i make it?

Here is image:

enter image description here


Solution

  • I use RecyclerView for list display item, and in Adapter I implements a Filterable:

    private List<Bank> banksList;
    private List<Bank> bankListFiltered;
    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                String charString = constraint.toString();
                if (charString.isEmpty()) {
                    bankListFiltered = banksList;
                } else {
                    List<Bank> filteredList = new ArrayList<>();
                    for (Bank row : banksList) {
                        String shortName = row.getShortName().toLowerCase();
                        if (shortName.contains(charString)) {
                            filteredList.add(row);
                        }
                    }
    
                    bankListFiltered = filteredList;
                }
    
                FilterResults filterResults = new FilterResults();
                filterResults.values = bankListFiltered;
                return filterResults;
            }
    
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                bankListFiltered = (ArrayList<Bank>) results.values;
                notifyDataSetChanged();
            }
        };
    }
    
    @Override
    public int getItemCount() {
        return bankListFiltered.size();
    }
    
    public BanksAdapter(List<Bank> banksList) {
        this.banksList = banksList;
        this.bankListFiltered = banksList;
    }
    

    And in my activity, add event for SearchView:

    new SearchView(this).setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
    
                return true;
            }
    
            @Override
            public boolean onQueryTextChange(String newText) {
                banksAdapter.getFilter().filter(newText);
                return true;
            }
        });