Spinner(スピナー)-ドロップダウンリスト・ウィジェット
Spinnerウィジェットは、ドロップダウンリストを表示するためのウィジェットです。
Spinnerウィジェットは、ListViewウィジェットと同じく、AdapterViewクラスのサブクラスのサブクラスです。
ListViewと同じく、ドロップダウンにて表示されるデータを指定するのに、Adapterオブジェクトを使います。
Spinnerウィジェットの基本形
Spinnerウィジェットの、基本的な使い方のサンプルを、以下に示します。
リスト1(SpinnerSample1.java)
このプログラムを実行すると、以下の図のようなSpinnerウィジェットが、画面に表示されます。
Spinnerウィジェットをクリックすると、以下のようなリストが表示されます。
リストの項目が選択されると、39~41行目のコードにより、トーストが表示されます。
33行目のOnItemSelectedListenerは、リスト項目が選択された時に実行されるonItemSelectedメソッドや、 リスト項目が選択された時に実行されるonNothingSelectedメソッドを持つ、イベントリスナーです。
このイベントリスナーのふるまいは、ListViewの時と同じです。
29行目のコメントをはずして、setDropDownViewResourceメソッドを有効にすると、 Spinnerウィジェットをクリックした時のリストは、以下のように表示されるようになります。
setDropDownViewResourceメソッドは、Spinnerウィジェットがドロップウンした時の画面のレイアウトを、指定します。
「android.R.layout.simple_spinner_dropdown_item」は、アンドロイドにあらかじめ定義されているレイアウトファイルのIDです。
30行目のコメントをはずして、setPromptメソッドを有効にすると、 Spinnerウィジェットをクリックした時のリストは、以下のように表示されるようになります。
31行目のコメントをはずして、setSelectionメソッドを有効にすると、2番目のリスト項目「abc」が選択された状態で表示されます。
setSelectionメソッドも、ListViewで出てきましたが、 リスト項目内の引数で指定された値+1の項目に、カーソルを移動するメソッドです。
応用パターン
ListViewとAdapterクラスとの関係がわかっていれば、 同じようにSpinnerとAdapterクラスを組み合わせて、いろいろな使い方ができます。
SimpleAdapterクラスを使う
「ListViewとListActivity(3)-応用編」の 「SimpleAdapterクラス-もっと簡単にレイアウトをカスタマイズ」 での例を、Spinnerウィジェットを使って応用してみます。リスト2(1)-レイアウトファイル(list_row.xml)
リスト2(2)-Javaソース(SpinnerSample2.java)
このプログラムを実行すると、以下の図のように表示されます。
Spinnerウィジェットをクリックすると、以下のようなリストが表示されます。
自前のレイアウトファイルで、Spinnerウィジェットの表示をカスタマイズできる事がわかります。
実行ボタンをクリックすると、対応するインテントが実行される事となります。
インテントについては「謎めいたインテント」を参照して下さい。
Spinnerとリソース
「ListViewとListActivity(3)-応用編」の「ArrayAdapterクラスとリソース」での例のように、 Spinnerウィジェットでも、レイアウトファイルのウィジェットの属性に配列データのリソースファイルを指定して、表示させる事ができます。
以下に、その例を示します。
リスト3(1)-レイアウトファイル(list_row.xml)
リスト3(2)-文字列リソースファイル(res/values/strings.xml)
リスト3(3)-配列データのリソースファイル(res/values/arrays.xml)
リスト3(4)-Javaソース(SpinnerSample3.java)
このプログラムを実行すると、以下の図のように表示されます。
Spinnerウィジェットをクリックすると、以下のようなリストが表示されます。
リソースファイルの追加,修正だけで、 プロジェクト作成時のJavaソースにいっさい手を加える事なく、Spinnerウィジェットを表示する事ができます。
参考URL
- Android Developers
- 開発ガイド
- リファレンス
「ListViewとListActivity」に関連する参考URLも参照して下さい。