Android – ActionBar SearchView с простым массивом String

Я хочу реализовать Виджет поиска ActionBar с возможностями предложений.
У меня уже есть строковый массив, хранящийся в моей базе данных ORMLite, которые хотят использовать для предложений.
Как я могу это сделать, не создавая эти нагрузки классов (Provider, Searchable …!)?

Это образец, я надеюсь, он может вам помочь.

Для реализации большего количества функций в этом курсоре, например. Открывайте активность при нажатии на элемент предложения, посмотрите на это http://developer.android.com/guide/topics/search/adding-custom-suggestions.html

 package com.roberto.android.thetracker.app; import android.database.MatrixCursor; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.app.Fragment; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; public class CustomSearchFragment extends Fragment { private static final String[] SUGGESTIONS = { "Bauru", "Sao Paulo", "Rio de Janeiro", "Bahia", "Mato Grosso", "Minas Gerais", "Tocantins", "Rio Grande do Sul" }; private SimpleCursorAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String[] from = new String[] {"cityName"}; final int[] to = new int[] {android.R.id.text1}; mAdapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1, null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.main, menu); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); SearchView searchView = (SearchView) MenuItemCompat .getActionView(menu.findItem(R.id.action_search)); searchView.setSuggestionsAdapter(mAdapter); searchView.setIconifiedByDefault(false); // Getting selected (clicked) item suggestion searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { @Override public boolean onSuggestionClick(int position) { // Your code here return true; } @Override public boolean onSuggestionSelect(int position) { // Your code here return true; } }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { populateAdapter(s); return false; } }); } // You must implements your logic to get data using OrmLite private void populateAdapter(String query) { final MatrixCursor c = new MatrixCursor(new String[]{ BaseColumns._ID, "cityName" }); for (int i=0; i<SUGGESTIONS.length; i++) { if (SUGGESTIONS[i].toLowerCase().startsWith(query.toLowerCase())) c.addRow(new Object[] {i, SUGGESTIONS[i]}); } mAdapter.changeCursor(c); } } 

Основываясь на ответе betorcs :

Вам не нужно

 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {...}); 

Вы можете использовать это вместо этого

 mAdapter.setFilterQueryProvider(new FilterQueryProvider() { @Override public Cursor runQuery(CharSequence constraint) { return populateAdapter((String) constraint); } }); 

И по populateAdapter, Заменить "return c;" С "mAdapter.changeCursor (c);"

 private Cursor populateAdapter(String query) { . . . return c; }