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