Android 过滤游标适配器的正确方法是什么
我有一个android应用程序,它有一个相当大的搜索建议数据库,我正试图在SearchView中使用它。当用户在搜索视图中输入文本时,我希望使用他们的查询过滤我的搜索建议 这是我最初的设置Android 过滤游标适配器的正确方法是什么,android,android-cursoradapter,Android,Android Cursoradapter,我有一个android应用程序,它有一个相当大的搜索建议数据库,我正试图在SearchView中使用它。当用户在搜索视图中输入文本时,我希望使用他们的查询过滤我的搜索建议 这是我最初的设置 protected void initToolbar(View rootView, String title) { searchView = (SearchView) toolbar.findViewById(R.id.res_search_view); searchView.setOnQue
protected void initToolbar(View rootView, String title) {
searchView = (SearchView) toolbar.findViewById(R.id.res_search_view);
searchView.setOnQueryTextListener(this);
searchView.setOnSuggestionListener(this);
Cursor newCursor = SearchUtil.getSearchSuggestionsCursor(title);
SearchCursorAdapter adapter = new SearchCursorAdapter(rootView.getContext(),newCursor);
searchView.setSuggestionsAdapter(adapter);
}
@Override
public boolean onQueryTextChange(String query) {
if (query == null || query.length() < 2){
return false;
}
SearchCursorAdapter adapter = (SearchCursorAdapter) searchView.getSuggestionsAdapter();
if (adapter != null){
Cursor newCursor = SearchUtil.getSearchSuggestionsCursor(query);
adapter.changeCursor(newCursor);
}
return false;
}
使用FilterQueryProvider,我的所有问题似乎都消失了。我的问题是我应该一直使用FilterQueryProvider吗
此外,我对FilterQueryProvider中返回的游标与最初提供给CursorAdapter的游标的关系感到困惑
任何解释都很好是的,
FilterQueryProvider
是您应该使用的方式,或者如果您正在扩展一些CursorAdapter
您可以覆盖runQueryOnBackgroundThread
,请参见是,FilterQueryProvider
是您应该使用的方式,或者,如果您正在扩展某些游标或适配器
,则可以覆盖runQueryOnBackgroundThread
,请参阅
protected void initToolbar(View rootView, String title) {
searchView = (SearchView) toolbar.findViewById(R.id.res_search_view);
searchView.setOnQueryTextListener(this);
searchView.setOnSuggestionListener(this);
Cursor newCursor = SearchUtil.getSearchSuggestionsCursor(title);
SearchCursorAdapter adapter = new SearchCursorAdapter(rootView.getContext(),newCursor);
adapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence charSequence) {
if (charSequence != null){
return SearchUtil.getSearchSuggestionsCursor(charSequence.toString());
} else {
return SearchUtil.getSearchSuggestionsCursor("");
}
}
});
}
@Override
public boolean onQueryTextChange(String query) {
searchView.getSuggestionsAdapter().getFilter().filter(query);
return false;
}