Anuj Zunjarrao
Anuj Zunjarrao

Reputation: 426

how to show suggestions of autocomplete Text Box contains with??

AutoComplete box dropdown suggestions not showing contains with its showing StartWith.

this is my code

 final ArrayList<String> listFilterJob = new ArrayList<>();
    listFilterJob.add("Anuj");
    listFilterJob.add("Akshay");
    listFilterJob.add("Ananta");
    listFilterJob.add("Muskan");
    listFilterJob.add("sachin");

    ArrayAdapter adapterFiltersJob = new ArrayAdapter(this,   android.R.layout.simple_list_item_1, listFilterJob);
    edtFilterJob.setThreshold(1);
    edtFilterJob.setDropDownWidth(350);
    edtFilterJob.setAdapter(adapterFiltersJob);

When i type "an" to autocomplete textbox its show result Anuj and Ananta in dropdown list but i want Anuj, Ananta and Muskan. how can i do this, help me.

Upvotes: 1

Views: 1982

Answers (1)

Niki van Stein
Niki van Stein

Reputation: 10734

You need to extend the ArrayAdapter that implements Filterable. Check this SO question and the answer: Filtering AutoCompleteTextView to show partial match

So your solution would be (the combination of question and answer):

public class CodesArrayAdapter extends ArrayAdapter implements Filterable{

    List<String> allCodes;
    List<String> originalCodes;
    StringFilter filter;

    public CodesArrayAdapter(Context context, int resource, List<String> keys) {
        super(context, resource, keys);
        allCodes=keys;
        originalCodes=keys;
    }

    public int getCount() {
        return allCodes.size();
    }

    public Object getItem(int position) {
        return allCodes.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    private class StringFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            String filterString = constraint.toString().toLowerCase();
            FilterResults results = new FilterResults();
            final List<String> list = originalCodes;

            int count = list.size();
            final ArrayList<String> nlist = new ArrayList<String>(count);
            String filterableString ;

            for (int i = 0; i < count; i++) {
                filterableString = list.get(i);
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(filterableString);
                }
            }

            results.values = nlist;
            results.count = nlist.size();
            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            allCodes = (ArrayList<String>) results.values;
            notifyDataSetChanged();
        }

    }


    @Override
    public Filter getFilter()
    {
        return new StringFilter();
    }
}

Upvotes: 8

Related Questions