Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 过滤游标适配器的正确方法是什么_Android_Android Cursoradapter - Fatal编程技术网

Android 过滤游标适配器的正确方法是什么

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

我有一个android应用程序,它有一个相当大的搜索建议数据库,我正试图在SearchView中使用它。当用户在搜索视图中输入文本时,我希望使用他们的查询过滤我的搜索建议

这是我最初的设置

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;
 }