ホーム >  Android > Spinner

Android -Spinner-

スピナー

スピナーを生成するにはSpinnerクラスを使用します。

アダプタを利用してスピナーの設定ができます。
アダプタとは、文字列や画像などの複数のデータとListView等ビューとの中間に存在し、両者の橋渡しをします。
Adapterは、すべてのViewで使用できるわけではなく、AdapterViewから派生したViewに限って使用することができます。

AdapterViewは、ViewGroupから派生したクラスです。
また、AdapterViewから派生したクラスとして、

  • GridView
  • ListView
  • Spinner等があります。

今回は、ビューとArrayListデータの橋渡しをするArrayAdapterをクラスを利用したサンプルです。

ArrayAdapter

ArrayAdapterのコンストラクタ

  • ArrayAdapter(Context context, int textViewResourceId)
  • ArrayAdapter(Context context, int resource, int textViewResourceId)

ArrayAdapterの主なメソッド

void add(T object) アダプタへの要素の追加
static ArrayAdapter
<CharSequence>
createFromResource(Context context, int textArrayResId, int textViewResId) リソースから新しいArrayAdapterを作成
void setDropDownViewResource(int resource) ドロップダウンのリソースIDの取得

AdapterView

AdapterViewのコンストラクタ

  • AdapterView(Context context)

AdapterViewの主なメソッド

abstract void setAdapter(T adapter) アダプタの指定
abstract void setSelection(int position) 選択する要素の位置を指定
Object getSelectedItem() 選択中の要素の取得
void setOnItemSelectedListener
(AdapterView.OnItemSelectedListener listener)
このAdapterViewの項目が選択されたときに呼び出されるコールバックを登録

Spinner

Spinnerのコンストラクタ

  • Spinner(Context context)
  • Spinner(Context context, int mode)
  • Spinner(Context context, AttributeSet attrs)
  • Spinner(Context context, AttributeSet attrs, int defStyle)
  • Spinner(Context context, AttributeSet attrs, int defStyle, int mode)

Sipnnerサンプル1

手順

  1. Adapterオブジェクトを作成
    ArrayAdapter(Context context, int textViewResourceId)
    contextにコンテキストを指定、textViewResourceIdには、レイアウトファイルのリソースIDを指定
    今回は、Androidであらかじめ用意されているandroid.R.layout.simple_spinner_itemを指定
  2. ドロップダウンリストのレイアウト設定
    今回は、Androidであらかじめ用意されているandroid.R.layout.simple_spinner_dropdown_itemを指定
  3. リストに表示する要素の追加
  4. 上記で作成さたAdapterをSpinnerにセット
  5. 選択されたタイミングでトースト表示

P0403SpinnerEx1.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class P0403SpinnerEx1 extends Activity {
  private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LinearLayout layout = new LinearLayout(this);
    layout.setBackgroundColor(Color.WHITE);
    layout.setOrientation(LinearLayout.VERTICAL);
    setContentView(layout);

    // アダプタの生成(選択済のアイテムを表示するレイアウトを指定)
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item);
    // ドロップダウンリストのアイテム表示レイアウトを指定
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // リスト内の要素を配列指定
    String[] items = new String[] { "赤""青""黄" };
    // アダプタに要素を追加
    for (String item : items) {
      adapter.add(item);
    }

    // Spinnerオブジェクト生成
    Spinner spinner = new Spinner(this);
    // SpinnerにAdapterをセット
    spinner.setAdapter(adapter);
    // 選択する要素位置の指定
    spinner.setSelection(0);
    // Spinnerのレイアウトサイズを指定
    spinner.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
    // レイアウトにSpinnerを追加
    layout.addView(spinner);

    // アイテム選択時に呼び出されるコールバックを登録
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
      // アイテムが選択された時の処理
      @Override
      public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {
        // 選択中のアイテム(要素)の取得
        String item = (String) parent.getItemAtPosition(position);
        // トースト表示
        Toast.makeText(P0403SpinnerEx1.this, item, Toast.LENGTH_SHORT)
            .show();
      }
      // アイテムが何も選択されなかった場合の処理
      @Override
      public void onNothingSelected(AdapterView<?> parent) {
      }
    });
  }
}

Sipnnerサンプル3(リソースをxml記述)

res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">P0403SpinnerEx3</string>
        <string-array name="spinner_items">
        <item >赤</item>
        <item >青</item>
        <item >黄</item>
    </string-array>
</resources>

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"  android:background="#ffffff">

    <Spinner
        android:id="@+id/spinner_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/spinner_items" />

</LinearLayout>

P0403SpinnerEx3.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class P0403SpinnerEx3 extends Activity {

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

    // Spinnerオブジェクトの取得
    Spinner spinner = (Spinner) findViewById(R.id.spinner_id);

    // アイテム選択時に呼び出されるコールバックを登録
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
      // アイテムが選択された時の処理
      @Override
      public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {

        // 選択中のアイテム(要素)の取得
        String item = (String) parent.getItemAtPosition(position);
        // トースト表示
        Toast.makeText(P0403SpinnerEx3.this, item, Toast.LENGTH_SHORT)
            .show();
      }

      // アイテムが何も選択されなかった場合の処理
      @Override
      public void onNothingSelected(AdapterView<?> parent) {

      }
    });
  }
}