Androidコンポーネント初級編#2 : Spinnerの使いかた

2011.08.03

前回の ListViewの使いかた では、リストコンポーネントの基本的な使いかたを紹介しました。
今回はSpinnerの使いかたについてご紹介したいと思います。
Spinnerは、ユーザに何か選択をしてもらう際に使用するコンポーネントです。
Webページのフォームでよく見かける、コンボボックスのAndroid版と認識してもらうとイメージしやすいと思います。

今回の記事では、下図のようなコンポーネントを作成します。

Spinnerの作りかた

基本的には前回のListViewと同じ作りかたです。
ListViewと違うところは、レイアウトを定義する数です。
Spinnerでは、選択したアイテムのレイアウトと、選択項目のレイアウトの2つのレイアウトを作成します。
同じレイアウトを指定してしまうと、どちらかが小さくなったり、極端に大きくなってしまいます。

1.ArrayListを作成する

前回のListView同様、まずはデータを作成します。
今回もString型のArrayListを作成します。

2.ArrayAdapterを作成する

ArrayAdapterを作成します。
ListViewと同様に、コンストラクタ引数にアイテムのレイアウトを入れますが、
ここで定義したレイアウトは選択済みのアイテムを表示するレイアウトです。
ドロップダウンリストとして表示するアイテムのレイアウトはsetDropDownViewResource()メソッドで定義します。

3.SpinnerにAdapterをセットする

最後に、SpinnerのsetAdapter()メソッドでAdapterを定義します。
これでSpinnerの完成です。

ソース

SampleSpinnerActivity.java

package cm.blog.sample;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class SampleSpinnerActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// Listの作成
		ArrayList<String> list = new ArrayList<String>();
		// Listにデータを入れる
		list.add("りゅう");
		list.add("へび");
		list.add("うま");
		list.add("ひつじ");

		// Adapterの作成
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, list);
		// ドロップダウンのレイアウトを指定
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		// ListViewにAdapterを関連付ける
		Spinner spinner = (Spinner) findViewById(R.id.spinner1);
		spinner.setAdapter(adapter);
	}
}

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">
<Spinner android:id="@+id/spinner1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Spinner>
</LinearLayout>

実行結果

選択されたアイテムを取得するには

Spinnerを作ることができましたが、選択されたアイテムが取得できなければ意味はありません。
Spinnerで選択されたアイテムを取得するには、以下のような方法があります。

A.OnItemClickListenerでハンドリングする

SpinnerのsetOnItemSelectedListener()でOnItemSelectedListenerクラスをセットすることで、
「Spinnerの項目が選択されたとき」のイベントをハンドリングできます。
OnItemSelectedListenerクラスでは、onItemSelected()メソッドを実装します。
引数にAdapterView、選択されたアイテムのポジションなどを取りますので、
AdapterViewのgetItemAtPosition()メソッドで選択されたアイテムを取得できます。

選択された内容を即座に必要とする場合は、こちらの方法で実装します。
(例:選択された項目によってフォームのUIを変える場合など)
下記ソースでは、選択された項目が確認できるように、Toastで表示しています。

ソース

 spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> adapterView, View view,
					int position, long id) {
				String item = (String) adapterView.getItemAtPosition(position);
				// 選択された項目をToastで表示する
				Toast.makeText(getApplicationContext(), item, Toast.LENGTH_SHORT).show();
			}
			@Override
			public void onNothingSelected(AdapterView<?> adapterView) {
				// 選択されなかった場合
			}
		}); 

実行結果

B.getSelectedItem()で取得する

SpinnerのgetSelectedItem()メソッドを使うと、現在選択されているアイテムが取得できます。
選択された内容を即座に必要としない場合は、こちらのほうが良いでしょう。
(例:「フォーム送信」などのボタンにより、データをまとめて処理する場合など)

ソース

String item = (String) spinner.getSelectedItem();

今回はListViewの次のステップとして、Spinnerの使いかたを紹介しました。
次回に続きます。