searchView には、キーボードからのコールバックがあります。
setOnQueryTextListener で検索/入力を処理します。このリスナーには 2 つのコールバックがあります。
- onQueryTextSubmit
- および onQueryTextChange
どちらもキーボードからイベントを取得します。
これは私のコードの一部です (onCreateOptionsMenu で呼び出されます)
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) SearchActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
final SearchView searchView = (SearchView) searchItem.getActionView();
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(SearchActivity.this.getComponentName()));
}
if (searchView == null) {
return true;
}
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// handle text submitted by user in here
String text = query;
searchView.setQuery("", false);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
if (text.length() > 0) downloadSearchQuery(text);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// handle text changed here
String mQueryString = newText.toString().trim();
if (mQueryString.toString().trim().length() >= 3) {
downloadSearchQuery(mQueryString.toString().trim());
} else {
if (mSearchList.size() != 0) {
mSearchList.clear();
mAdapter.notifyDataSetChanged();
}
checkAdapterIfEmpty();
}
return true;
}
});
}