0
Мой пользовательский адаптер для AutoCompleteTextView
всегда возвращает все элементы. results.count
всегда правильный размер, поэтому мне интересно, ...Пользовательский адаптер AutoCompleteTextView возвращает все элементы
public class UniversityAdapter extends ArrayAdapter<University> implements Filterable {
List<University> items = new ArrayList<University>();
List<University> itemsAll = new ArrayList<University>();
private Context context;
int resource;
public UniversityAdapter(Context context, int resId, List<University> items) {
super(context, resId, items);
this.context = context;
this.resource = resId;
this.items = items;
itemsAll.addAll(this.items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(resource, parent, false);
} else {
row = convertView;
}
University university = itemsAll.get(position);
TextView nameView = (TextView) row.findViewById(android.R.id.text1);
nameView.setText(university.getName());
return row;
}
@Override
public Filter getFilter() {
return new Filter() {
public String convertResultToString(Object resultValue) {
String str = ((University) (resultValue)).getName();
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
List<University> suggestions = new ArrayList<University>();
for (University university : itemsAll) {
if (university.getName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
suggestions.add(university);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0) {
items = (ArrayList<University>) results.values;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
}
}
Это вызовет 'IndexOutOfBoundsException', потому что элементы не содержат все начальные элементы. – Chris
Нельзя, у вас есть this.items = элементы в вашем конструкторе –
'items = (ArrayList) results.values;' будет перезаписывать начальные элементы, поэтому мне нужны 'itemsAll'. –
Chris