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 件のコメント:
コメントを投稿