SpinnerはAdapterと組み合わせて使います。Adapterに選択肢のデータをセットして、AdapterをSpinnerにセットします。
都道府県をSpinnerで選択して、選択した都道府県名をToastで表示するサンプルを作ります。
◆ Spinnerを使う
Androidプロジェクトの設定
プロジェクト名: SpinnerTest1a ビルドターゲット: Android 2.1-update1 アプリケーション名: SpinnerTest1a パッケージ名: jp.co.triware.samples.SpinnerTest1a アクティビティーの作成: SpinnerTest1aActivity 最小SDKバージョン: 7
SpinnerTest1aActivity.java
package jp.co.triware.samples.SpinnerTest1a; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class SpinnerTest1aActivity extends Activity { private static final String[] strPrefs = { // 北海道地方 "北海道", // 東北地方 "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", // 関東地方 "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", // 中部地方 "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", // 近畿地方 "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", // 中国地方 "鳥取県", "島根県", "岡山県", "広島県", "山口県", // 四国地方 "徳島県", "香川県", "愛媛県", "高知県", // 九州地方 "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", // 沖縄地方 "沖縄県", }; private static final String[] strPrefs2 = { // 北海道地方 "Hokkaido", // 東北地方 "Aomori", "Iwate", "Miyagi", "Akita", "Yamagata", "Fukushima", // 関東地方 "Ibaraki", "Tochigi", "Gumma", "Saitama", "Chiba", "Tokyo", "Kanagawa", // 中部地方 "Niigata", "Toyama", "Ishikawa", "Fukui", "Yamanashi", "Nagano", "Gifu", "Shizuoka", "Aichi", // 近畿地方 "Mie", "Shiga", "Kyoto", "Osaka", "Hyogo", "Nara", "Wakayama", // 中国地方 "Tottori", "Shimane", "Okayama", "Hiroshima", "Yamaguchi", // 四国地方 "Tokushima", "Kagawa", "Ehime", "Kochi", // 九州地方 "Fukuoka", "Saga", "Nagasaki", "Kumamoto", "Oita", "Miyazaki", "Kagochima", // 沖縄地方 "Okinawa", }; private static final int defaultPref = 26; // 大阪府 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 都道府県 ArrayAdapter<String> adptPrefs = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); adptPrefs.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); for (int i = 0; i < strPrefs.length; i ++) { adptPrefs.add(strPrefs[i]); } Spinner spinPrefs = (Spinner)findViewById(R.id.prefs_spin); spinPrefs.setAdapter(adptPrefs); spinPrefs.setSelection(defaultPref); // 選択初期設定 spinPrefs.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinParent = (Spinner)parent; String myItem = (String)spinParent.getSelectedItem(); int myPosition = spinParent.getSelectedItemPosition(); Toast.makeText(getApplicationContext(), "item=[" + myItem + "]\nposition=" + myPosition + " (" + position + ")", Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); // Prefectures ArrayAdapter<String> adptPrefs2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); adptPrefs2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); for (int i = 0; i < strPrefs2.length; i ++) { adptPrefs2.add(strPrefs2[i]); } adptPrefs2.sort(null); // ソート Spinner spinPrefs2 = (Spinner)findViewById(R.id.prefs2_spin); spinPrefs2.setAdapter(adptPrefs2); spinPrefs2.setPrompt("Please choose a prefecture"); // タイトル spinPrefs2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinParent = (Spinner)parent; String myItem = (String)spinParent.getSelectedItem(); int myPosition = spinParent.getSelectedItemPosition(); Toast.makeText(getApplicationContext(), "item=[" + myItem + "]\nposition=" + myPosition + " (" + position + ")", Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } }
漢字表記の初期状態は「大阪府」を選択しています。
ローマ字表記はアルファベット順に並べ替えています。また選択肢を表示する際にプロンプトを指定し、タイトルを表示するようにしています。
SpinnerのsetSelection()で指定したインデックスの項目が選択された状態になります。指定しなければ先頭が選択されます。
Adapterのsort()を使うことで、選択肢のデータを並べ替えることもできます。
onItemSelected()の引数parentがSpinnerに相当しますので、それを元にgetSelectedItem()で選択された項目の文字列を取得できます。getSelectedItemPosition()を使うと、一覧の何番目なのか、位置(インデックス)を取得することができます。なお、引数positionも位置を表しています。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="都道府県 : " /> <Spinner android:id="@+id/prefs_spin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Prefectures : " /> <Spinner android:id="@+id/prefs2_spin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> </LinearLayout>
実行結果
Spinner生成時にonSelectedItems()が呼び出されますので、起動時にToastを表示します。
この状態から「都道府県」のSpinnerをクリックすると・・・
「大阪府」を選択した状態で一覧が表示されます。
「兵庫県」を選ぶと・・・
無事、「兵庫県」が反映されました。
同様に「Prefectures」も試してみましょう。
こちらはプロンプトを設定していますので、「都道府県」の一覧と違ってタイトルが表示されています。
0 件のコメント:
コメントを投稿