Фильтрация запасов 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)