Search suggestions from network resource into Quick Search box

后端 未结 3 1971
孤城傲影
孤城傲影 2020-12-08 05:24

I\'m building the search in an application and need to have a way of putting the suggestions which I get from my server as a JSON-array into the list of suggestions which is

3条回答
  •  时光取名叫无心
    2020-12-08 06:01

    Here is an example of SearchView with suggestions coming from a network service (I used Retrofit):

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_search_activity, menu);
    
            final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
    
            final CursorAdapter suggestionAdapter = new SimpleCursorAdapter(this,
                    android.R.layout.simple_list_item_1,
                    null,
                    new String[]{SearchManager.SUGGEST_COLUMN_TEXT_1},
                    new int[]{android.R.id.text1},
                    0);
            final List suggestions = new ArrayList<>();
    
            searchView.setSuggestionsAdapter(suggestionAdapter);
            searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
                @Override
                public boolean onSuggestionSelect(int position) {
                    return false;
                }
    
                @Override
                public boolean onSuggestionClick(int position) {
                    searchView.setQuery(suggestions.get(position), false);
                    searchView.clearFocus();
                    doSearch(suggestions.get(position));
                    return true;
                }
            });
    
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
    
                @Override
                public boolean onQueryTextChange(String newText) {
    
                    MyApp.autocompleteService.search(newText, new Callback() {
                        @Override
                        public void success(Autocomplete autocomplete, Response response) {
                            suggestions.clear();
                            suggestions.addAll(autocomplete.suggestions);
    
                            String[] columns = {
                                    BaseColumns._ID,
                                    SearchManager.SUGGEST_COLUMN_TEXT_1,
                                    SearchManager.SUGGEST_COLUMN_INTENT_DATA
                            };
    
                            MatrixCursor cursor = new MatrixCursor(columns);
    
                            for (int i = 0; i < autocomplete.suggestions.size(); i++) {
                                String[] tmp = {Integer.toString(i), autocomplete.suggestions.get(i), autocomplete.suggestions.get(i)};
                                cursor.addRow(tmp);
                            }
                            suggestionAdapter.swapCursor(cursor);
                        }
    
                        @Override
                        public void failure(RetrofitError error) {
                            Toast.makeText(SearchFoodActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                            Log.w("autocompleteService", error.getMessage());
                        }
                    });
                    return false;
                }
            });
    
            return true;
    }
    

提交回复
热议问题