Фильтрация запасов ArrayAdapter, показывающая неправильные элементы
Я расширил ArrayAdapter для моего пользовательского класса. Мой класс переопределяет toString() и возвращает поле, которое я хочу использовать для поисковых запросов.
Это мой код фильтра:
productItemAdapter.getFilter().filter(filterText.toLowerCase());
Это мой код toString():
return name.toLowerCase();
Фильтрация работает (возвращается правильное количество элементов), но это неправильные элементы. Он всегда показывает первые элементы в списке вместо тех, которые соответствуют поиску...
1 ответ:
У меня была точно такая же проблема, и я бы предположил (как и я), что вы не читали документацию, пытаясь реализовать это.
Я передавал свой массив объектов в ArrayAdapter и затем передавал массив в супер конструктор.
Ошибка, которую я сделал: я сохранил ссылку на переданный массив и использовалэтот массив для рисования элементов в методе
getView():public SimpleAdapter( Context context, List< MyType > values ) { super( context, R.layout.rowlayout, values ); this.context = context; this.values = values; } @Override public View getView( int position, View convertView, ViewGroup parent ) { // ... MyType myType = values.get( position ); // ... }То, что я должен был сделать, называется
getItem()на Класс ArrayAdapter, напримерMyType myType = getItem( position );Который исправил это красиво и в ретроспективе довольно очевидно.
-(e)