Android: фильтрация простого списка курсоров AdAdter - PullRequest
7 голосов
/ 27 февраля 2010

Сейчас я сталкиваюсь с проблемами, пытаясь реализовать FilterQueryProvider в моем настраиваемом адаптере SimpleCursorAdapter, поскольку я не уверен, что делать в функции runQuery FilterQueryProvider.

Другими словами, поскольку запрос, который включает в себя мой ListView, в основном получает rowID, имя и третий столбец из таблицы моей базы данных, я хочу иметь возможность фильтровать курсор на основе частичного значения столбца name.

Однако я не уверен, смогу ли я сделать это напрямую из runQuery, не расширяя свой класс БД, поскольку я хочу отфильтровать существующий курсор, или мне придется создать новую функцию запроса в моем классе БД, которая частично ищет мое имя столбца, и если да, то как мне создать оператор запроса, используя аргумент ограничения CharSequence в runQuery?

Меня также беспокоят проблемы с производительностью, связанные с попыткой выполнения нескольких запросов на основе частичного текста, поскольку в рассматриваемой таблице БД содержится около 1300-1400 строк. Другими словами, столкнулся бы я с узким местом, пытаясь отфильтровать курсор?

1 Ответ

3 голосов
/ 28 апреля 2010

Вам нужно выполнить запрос, который вернет новый отфильтрованный курсор:

public class MyActivity extends ListActivity implements FilterQueryProvider {

    private Cursor cursor;

    @Override
    public Cursor runQuery(CharSequence constraint) {
        if(cursor != null) {
            cursor.close();
        }
        cursor = somehowGetAFilteredCursorFor(constraint);
        startManagingCursor(cursor);
        return cursor;
    }

}

...