2013年8月23日金曜日

【Android】Spinnerは配置しないとイベント発行しない

表題でSpinnerと書いたが,あらゆるViewがそうかもしれない.
Spinner(いわゆるドロップダウンリスト)では
OnItemSelectedListenerを使って,選択即反映をさせることが多い.
リストのアイテムが選択されたときに発行されるイベントである.
そのイベントだが,Spinner自体をActivityに配置しないと発行されない.

配置しないとそもそもドロップダウンリストが表示できない…
というわけではないから悩むことになった.
具体的には


別に用意したTextViewをクリックするとリストだけ表示する場合.
Spinnerは画面に配置せずに,
TextViewがクリックされたときにperformClickメソッドでSpinnerを叩く.
(このperformClickメソッドはViewからの継承のため,他のViewでも使えるはず.)
すると,リストは表示される.
リストが多いとスクロールもできるし,
タップすれば選択色が光ってリストも消える.
まるでちゃんと動作しているようにみえる.

しかし,OnItemSelectedイベントは飛んでこない.

ここで,Spinnerを画面に配置してやる必要があった.
これは配置サイズが0dipでもいいし,
Visibility:INVISIBLEでもいい.

ただし,配置してないのと同様の扱いになるVisibility:GONEではやはり
イベントが発生しない.

width/heightともに0dipに設定した上でVisibility:INVISIBLEに指定した
Spinnerをレイアウト最下部に配置することにした.

余談だが,Spinnerは画面に配置されると同時に
position:0選択のイベントが発行されるらしく,
何らかの処理を設定していたらそれに注意が必要である.
選択してActivityを移動とかの処理を入れていると
配置と同時にActivity移動なんてことになりかねない.

0 件のコメント:

コメントを投稿