1
我有一個執行進入一個動作條搜索基於一些查詢文本搜索的定製AsyncTaskLoader:刷新AsyncTaskLoader的查詢與OnQueryTextListener
class SearchLoader extends AsyncTaskLoader<List<String>> {
private static final String TAG = SearchLoader.class.getName();
private List<String> data;
private String query;
private DataStore dataStore;
public SearchLoader(Context context, DataStore dataStore, String query) {
super(context);
this.dataStore = dataStore;
this.query = query;
}
@Override
public List<String> loadInBackground() {
try {
return dataStore.find(query);
} catch (SearchException e) {
Log.e(TAG, String.format("Error performing search, query: %s", query), e);
}
return null;
}
}
我已經迷上了一個OnQueryTextListener通過執行刷新加載的數據當查詢發生變化時重新搜索:
@Override
public boolean onQueryTextChange(String newText) {
query = !TextUtils.isEmpty(newText) ? newText : null;
getLoaderManager().restartLoader(SEARCHRESULTS_LOADER, null, this);
return false;
}
我知道我需要調用getLoaderManager()。restartLoader。
但是,我不確定的是如何在加載器本身上設置新的查詢文本?
- 我沒有訪問加載器實例爲據我所知僅用於調用setter
- 的restartLoader的參數,如果一個新的Loader需要創建
推薦的方法是什麼?
對於這兩種方法,私有的LoaderManagerImpl類具有稍微不同的Javadoc註釋,這實際上更好地描述了發生了什麼。特別是,對於restartLoader(),它說:「調用來重新創建與特定ID關聯的Loader,如果當前有一個與此ID關聯的Loader,它將被視爲合適的取消/停止/銷燬。給定的參數將被創建並將其數據一次性傳送給您。「 – gnuf