У меня есть рабочий поиск Activity
, который запрашивает удалённую базу данных при отправке ввода в ActionBar
android.support.v7.widget.SearchView
(ввод «Go» на мягкой клавиатуре). Это прекрасно работает, но в конечном итоге я хотел бы запросить базу данных каждый раз, когда текст SearchView
изменяется путем добавления или удаления символа. Мой код инициализации SearchView
приведен ниже.Выполнять поиск при вводе
SearchFragment.java (дочерний фрагмент поиск Activity
упомянутых выше)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
// Get the searchable.xml data about the search configuration
final SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchInfo = searchManager.getSearchableInfo(getActivity().getComponentName());
// Associate searchable configuration with the SearchView
mSearchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
mSearchView.setSearchableInfo(searchInfo);
mSearchView.requestFocus();
mSearchView.onActionViewExpanded();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mSearchListAdapter.clear();
return false;
}
@Override
public boolean onQueryTextChange(String query) {
mSearchListAdapter.clear();
// Execute search ...
return false;
}
});
}
Я представляю себе работу должен быть сделан в рамках onQueryTextChange(String query)
метода выше, но я не уверен, что должно быть называется. Я думал о вызове метода экземпляра SearchManager
startSearch
, но это не кажется лучшей практикой. Кто-нибудь имеет опыт работы с типом поиска и будет готов поделиться эффективным решением?
UPDATE:
MainActivity.java (поиска Activity
)
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
// Handle the search for a particular musical object
final SearchFragment searchFragment = (SearchFragment) getFragmentManager().findFragmentByTag(SearchFragment.TAG);
String query = intent.getStringExtra(SearchManager.QUERY);
mWebService.searchTracks(query, new Callback<Pager>() {
@Override
public void success(Pager results, Response response) {
Log.d(TAG, "Search response received.");
searchFragment.updateItems(results);
}
@Override
public void failure(RetrofitError retrofitError) {
Log.e(TAG, "Search response failed: " + retrofitError.toString());
}
});
выше search interface design является то, что в Android команды в Google рекомендуется.
Я не хочу предлагать варианты автозаполнения. Я просто ищу способ выполнить поисковый запрос в удаленной базе данных каждый раз, когда символ вводится или удаляется из '' 'SearchView'''. – Ryan
Запустил ли вы вызов api на другой удаленный сервер? – Rohit5k2
Да. Это потребовало бы вызова API каждый раз, когда текст '' 'SearchView'' был изменен. В основном я ищу способ _correct_ для вызова поисковой службы поиска '' 'Activity''', когда текст запроса изменяется. – Ryan