У меня есть пользовательский поиск, реализованный с использованием SearchView (ActionBar) с настраиваемым адаптером и провайдером. У меня проблема в том, что метод query() ContentProvider вызывается только один раз, когда я впервые ввожу что-то в SearchView! Если я продолжаю печатать в представлении, запрос не вызывается, поэтому список предложений не обновляется.
Во фрагменте у меня есть инициализация SearchView:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.planning, menu);
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.searchAirportItem).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setOnQueryTextListener(this);
searchView.setOnSuggestionListener(this);
airportSearchAdapter = new AirportSearchAdapter(getActivity());
searchView.setSuggestionsAdapter(airportSearchAdapter);
}
Адаптер предложений AirportSearchAdapter только переопределяет макет предлагаемых элементов.
Фрагмент реализует QueryTextListener, а метод onQueryTextChange выглядит так:
@Override
public boolean onQueryTextChange(String newText) {
Bundle data = new Bundle();
data.putString("query", newText);
getActivity().getLoaderManager().initLoader(1, data, this);
return true;
}
Фрагмент также реализует LoaderCallbacks:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = AirportsContentProvider.CONTENT_URI;
return new CursorLoader(getActivity(), uri, null, null, new String[] { args.getString("query") }, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
airportSearchAdapter.changeCursor(data);
}`
Любая идея, почему метод запроса ContentProvider вызывается только один раз? Не каждый раз, когда я печатаю?