2

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

Rubick
  • 296
  • 3
  • 22

1 Answers1

2

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;
        }
    });
Tung Tran
  • 2,885
  • 2
  • 17
  • 24
  • Thanks for your answering me ! But i mean how to make a layout like this image above. The idea is adding a overlap fragment modal but i'm not sure for that. So do you have any idea for helping me solve the problem? – Luan Le Thanh Aug 23 '18 at 05:08
  • You can create a top dialog with a edittext and add event text change. – Tung Tran Aug 23 '18 at 05:14
  • yeah. i solved it. I created a `DialogFragment` with custom layout on top. A big thanks to you. – Luan Le Thanh Aug 23 '18 at 07:30