SearchView で検索した後、キーボードを閉じる

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);
   }
}