Как выполнить запрос FilterQueryProvider в асинхронном режиме? - PullRequest
1 голос
/ 08 октября 2011

Я использую FilterQueryProvider для фильтрации содержимого представления списка, которое поддерживается пользовательским CursorAdapter.

Чтобы использовать FilterQueryProvider, необходимо переопределить метод runQuery (), который возвращает объект Cursor. Теперь мне интересно, как запросить курсор асинхронно, чтобы избежать блокировки потока пользовательского интерфейса.

Есть ли какая-то лучшая практика? Я не смог найти никакой информации, выполняется ли метод runQuery () в UI-потоке или в его собственном потоке.

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Из документации:

Операции фильтрации, выполняемые вызовом filter (CharSequence, android.widget.Filter.FilterListener) выполняются асинхронно

Итак, ваш код должен выглядеть так:

private void filterList(CharSequence constraint) {
    final YourListCursorAdapter adapter = 
        (YourListCursorAdapter) getListAdapter();
    final Cursor oldCursor = adapter.getCursor();
    adapter.setFilterQueryProvider(filterQueryProvider);
    adapter.getFilter().filter(constraint, new FilterListener() {
        public void onFilterComplete(int count) {
            // assuming your activity manages the Cursor 
            stopManagingCursor(oldCursor);
            final Cursor newCursor = adapter.getCursor();
            startManagingCursor(newCursor);
            // safely close the oldCursor
            if (oldCursor != null && !oldCursor.isClosed()) {
                oldCursor.close();
            }
        }
    });
}

private FilterQueryProvider filterQueryProvider = new FilterQueryProvider() {
    public Cursor runQuery(CharSequence constraint) {
        return dbHelper.getListCursor(constraint);
    }
};

Источники: это и это

0 голосов
/ 08 октября 2011

Согласно документации CursorAdapter вы можете использовать CursorAdapter#runQueryOnBackgroundThread

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...