我正在使用FilterQueryProvider來過濾由自定義CursorAdapter備份的列表視圖的內容。如何異步運行FilterQueryProvider的查詢?
要使用FilterQueryProvider,您必須重寫runQuery()方法,該方法返回一個Cursor對象。現在我想知道如何異步查詢遊標以避免阻塞UI線程。
是否有某種最佳實踐?我無法找到runQuery()方法是在UI線程還是在它自己的線程上執行的任何信息。
我正在使用FilterQueryProvider來過濾由自定義CursorAdapter備份的列表視圖的內容。如何異步運行FilterQueryProvider的查詢?
要使用FilterQueryProvider,您必須重寫runQuery()方法,該方法返回一個Cursor對象。現在我想知道如何異步查詢遊標以避免阻塞UI線程。
是否有某種最佳實踐?我無法找到runQuery()方法是在UI線程還是在它自己的線程上執行的任何信息。
從文檔:
通過調用過濾器(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);
}
};
根據CursorAdapter documentation可以使用CursorAdapter#runQueryOnBackgroundThread
是什麼''''dbHelper''''? – Zach