Фильтрация запасов ArrayAdapter, показывающая неправильные элементы


Я расширил ArrayAdapter для моего пользовательского класса. Мой класс переопределяет toString() и возвращает поле, которое я хочу использовать для поисковых запросов.

Это мой код фильтра:

productItemAdapter.getFilter().filter(filterText.toLowerCase());

Это мой код toString():

return name.toLowerCase();

Фильтрация работает (возвращается правильное количество элементов), но это неправильные элементы. Он всегда показывает первые элементы в списке вместо тех, которые соответствуют поиску...

1 4

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)