Чтобы достичь динамического адаптера, нужно реализовать собственный класс Filter и переопределить методы executeFiltering и publishResults.
В executeFiltering создайте новый экземпляр FilterResults и инициализировать его значения и считать с новыми элементами .. (этот метод работает по умолчанию в новом потоке!) Что-то вроде этого:
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults fr = null;
if (constraint != null)
{
List<ListItem> list = getFilterdValues(constraint.toString());
if (list != null)
{
fr = new FilterResults();
fr.values = list;
fr.count = list.size();
}
}
return fr;
}
и в publishResults добавить результат вАдаптер, подобный следующему:
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
AutoCompleteAdapter.this.clear();
if (results != null)
{
if (results.values != null)
{
List<ListItem> items = (List<ListItem>) results.values;
for (ListItem listItem : items) {
AutoCompleteAdapter.this.add(listItem);
}
if (items.size() > 0)
{
AutoCompleteAdapter.this.notifyDataSetChanged();
return;
}
}
}
AutoCompleteAdapter.this.notifyDataSetInvalidated();
}
также и важно, что вам нужно настроить адаптер и переопределить getFilter с помощью собственного нового пользовательского класса Filter, например:
public class AutoCompleteAdapter extends ArrayAdapter<RMAutoComplete.ListItem>
{
private CustomFilter _customFilter = null;
@Override
public Filter getFilter() {
if (_customFilter == null)
_customFilter = new CustomFilter();
return _customFilter;
}
public AutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
}
надеюсь, это было полезнодля кого-то ..