2012年9月20日木曜日

AndroidのSpinnerのダイアログ画面をonStopとかで閉じる方法

Androidの標準パーツであるSpinnerはタップしたらダイアログが出せたりしてとっても便利ですがその出てくるダイアログの制御が出来ない。
主に画面を閉じた時に自動的にダイアログも閉じて欲しかったのですが上手くいかないので調べてみたら以外と記事なかったのでメモ書き。

  1. @Override  
  2. protected void onStop() {  
  3.     super.onStop();  
  4.     ViewGroup content = (ViewGroup) findViewById(android.R.id.content);  
  5.     Spinner spinner = (Spinner) findViewById(R.id.spinner);  
  6.     content.removeView(spinner);  
  7.     content.addView(spinner);  
  8. }  

記事にするほどでも無かったかな…。
Spinnerのソースコード見てみるとダイアログ自体は

  1. private SpinnerPopup mPopup;  

として持ってるんだけどこれ自体を触ってる場所はままあるんだけど

  1. dialog.dismiss();  

を実行してるのが

  1. protected void onDetachedFromWindow()   

なので一旦ViewGroup内から削除→再追加としてあげるとスルッとうまくいきます。
まぁこんな特殊な使い方するぐらいなら自分で作るなりカスタマイズするなりした方が良いかも。

業務的に使う時の参考にでもしてください。