Androroid SearchView で検索した後、キーボードを閉じるという処理を、書かないとダメだった。
先日、
http://blog.zaq.ne.jp/oboe2uran/article/987/
ここまで、書いたけど実践では以下のようにしないとダメみたいだ。
・SearchView#setOnFocusChangeListener にフォーカスChangeで、キーボードを閉じる処理を書くこと。
・検索後アクションバーの MenuItem を閉じること。→ collapseActionView()の実行
MenuItem menuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.search_menu, menu);
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName());
menuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)menuItem.getActionView();
searchView.setSearchableInfo(searchableInfo);
searchView.setIconifiedByDefault(false);
searchView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
searchView.setOnFocusChangeListener(new View.OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus){
// キーボードを閉じる
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
});
return true;
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
if (Intent.ACTION_SEARCH.equals(intent.getAction())==true){
final String query = intent.getStringExtra(SearchManager.QUERY);
// 端末内検索を、AsyncTask で実行する
new SearchTask(this){
@Override
protected void founded(Integer count){
if (count==0){
Toast.makeText(getApplicationContext(), "見つかりませんでした。", Toast.LENGTH_SHORT).show();
}else{
// 見つかった時の処理
// 見つかったら SearchView閉じる。
menuItem.collapseActionView();
}
}
}.execute(Environment.getExternalStorageDirectory().getAbsolutePath(), query);
}
}