我有一个自定义 AsyncTaskLoader,它根据输入到 ActionBar 搜索中的一些查询文本执行搜索:
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 的参数仅在需要创建新加载程序时使用
推荐的方法是什么?