Пользовательский ArrayAdapter для автозаполнения, показывающий все результаты - PullRequest
0 голосов
/ 07 марта 2012

Это мой пользовательский ArrayAdapter

    public class CustomAdapater extends ArrayAdapter implements Filterable {
    private ArrayList<String> mData;
    private ArrayList<String> orig;
    private ArrayList<String> suggestions;
    LayoutInflater inflater;
    @SuppressWarnings("unchecked")
    public CustomAdapater(Context context, int textViewResourceId,ArrayList<String> al) {
        super(context,textViewResourceId,al);
        inflater = LayoutInflater.from(context);
        mData = al;
        orig = (ArrayList<String>)mData.clone();
        this.suggestions = new ArrayList<String>();
    }

    @Override
    public int getCount() {
        return suggestions.size();
    }

    @Override
    public Object getItem(int position) {
        return suggestions.get(position);
    }

    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();              
                if(constraint != null) {
                    suggestions.clear();
                    for(String s:orig){
                        if(s!=null && s.contains(constraint))
                        suggestions.add(s);
                    }
                    filterResults.values = suggestions;
                    filterResults.count = suggestions.size();
                }
                return filterResults;
            }

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

Я применил это к автозаполнению поля. По умолчанию список автозаполнения поиска начинается со строки поиска. Я хочу список, который содержит строку поиска.

1 Ответ

0 голосов
/ 07 марта 2012

Для функциональности, которую вы хотите, я думаю, что вы должны написать свой собственный код ... так как это невозможно с полем автозаполнения по умолчанию ... предположим, что это массив строк, которые вы используете для автозаполнения ..

static final String[] COUNTRIES = new String[20];

и в нем 20 стран .. затем попробуйте выполнить поиск следующим образом ..

for(int i=0;i<20;i++)
{
int index=COUNTRIES[i].index(autocomplete.getText().toString);//<---- here autocomplete is the autocomplete textview
if (index >-1)
{
lst.add(COUNTRIES[i])<----- lst is the arraylist of strings you should create
}
}
runOnUiThread(new Runnable(){
 public void run() {
 for(int k=0;k<lst.size();k++)
 {
adapter.add(lst[k])
 }
 adapter.notifyDataSetChanged();
}
}
);

запустите этот код в другом потоке, когда autocomplete.getText (). Length> 1 (или что вы хотитедля длины порога) ... я думаю, вы получите требуемый результат .. =]

...