• 検索結果がありません。

第 3 章 ユーザーインターフェース 25

3.7 スピナー

3.7. スピナー 39

アダプターに対しては、スピナーの上に表示される項目のためのレイアウトだけではなくて、

ドロップダウンリストの項目のためのレイアウトも、設定する必要があります。

ドロップダウンリストの項目のためのレイアウトをアダプターに設定したいときは、

void setDropDownViewResource(int resource) というメソッドを使います。たとえば、

adapter.setDropDownViewResource(

android.R.layout.simple_spinner_dropdown_item);

と書くことによって、

simple_spinner_dropdown_item

という、ドロップダウンリストの項目のために最初から定義されているレイアウトをアダプター に設定することができます。

アダプターに項目を追加する方法や、スピナーに対してアダプターを設定する方法は、リスト ビューの場合と同じです。

3.7.3 スピナーのイベントリスナー

スピナーに対してイベントリスナーを設定しておくことによって、スピナーによって選択され ている項目が変更されたときに何らかの動作を実行する、ということができます。

選択されている項目が変更されたときに何らかの動作を実行するイベントリスナーは、

android.widget.AdapterView.OnItemSelectedListener

というインターフェースを実装したクラスのインスタンスです。そして、このインターフェース を実装するために定義する必要があるのは、

void onItemSelected(AdapterView<?> parent, View view, int position, long id)

void onNothingSelected(AdapterView<?> parent) という二つのメソッドです。

選択されている項目が変更されたときに実行したい動作は、onItemSelectedの中に書きます。

このメソッドが受け取る引数の使い方は、第3.6節で説明した、onItemClickの引数の使い方と 同じです。なお、このメソッドは、選択されている項目が変更されたときだけではなくて、1個 以上の項目を持つアダプターがスピナーに設定されたときにも呼び出されます。

3.7.4 デフォルトの項目の設定

スピナーは、アダプターが設定された直後は、0という番号を持つ項目、つまりアダプターに 最初に追加した項目が選択されている状態になっています。ユーザーに項目を選択してもらう前 に、デフォルトの項目として0番以外の項目を設定しておきたいときは、

void setSelection(int position)

というメソッドを使います。このメソッドを呼び出して、引数として項目の番号を渡すと、スピ ナーは、その項目が選択されている状態に設定されます。

3.7.5 スピナーを使ったアプリケーションの例

それでは、スピナーを使ったアプリケーションを作ってみましょう。

まず最初に、次のようなプロジェクトを作成してください。

Project name spinner Application name スピナー

Package name org.example.spinner Create Activity SpinnerActivity

次に、main.xmlを次のように書き換えてください。

レイアウトXMLの例 main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

3.7. スピナー 41 android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<Spinner android:id="@+id/spinner">

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<TextView android:id="@+id/selecteditem"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

次に、SpinnerActivity.javaを次のように書き換えてください。

プログラムの例 SpinnerActivity.java package org.example.spinner;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.AdapterView;

import android.widget.TextView;

public class SpinnerActivity extends Activity { /** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ArrayAdapter<Man> adapter = new ArrayAdapter<Man>(this,

android.R.layout.simple_spinner_item);

adapter.setDropDownViewResource(

android.R.layout.simple_spinner_dropdown_item);

adapter.add(new Man("源義経", 526));

adapter.add(new Man("足利尊氏", 876));

adapter.add(new Man("織田信長", 1200));

adapter.add(new Man("土方歳三", 361));

final Spinner spinner = (Spinner) findViewById(R.id.spinner);

spinner.setAdapter(adapter);

spinner.setSelection(2);

spinner.setOnItemSelectedListener(

new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { setSelectedItem(parent, position);

}public void onNothingSelected(AdapterView<?> parent) { }

} });

private void setSelectedItem(AdapterView<?> parent, int position) { Man man = (Man) parent.getAdapter().getItem(position);

final TextView selecteditem =

(TextView) findViewById(R.id.selecteditem);

selecteditem.setText(

"本命の彼氏 = " + man.getName() + "\n" +

"年収 = " + man.getIncome() + "万円");

} }

class Man { String name;

int income;

Man(String aname, int aincome) { name = aname;

income = aincome;

}

public String toString() {

return name + "(年収" + income + "万円)";

}public String getName() { return name;

}public int getIncome() { return income;

} }

これで完成です。実行すると、スピナーが表示されて、それによって選択されているオブジェ クトについてのメッセージが、その下に表示されるはずですので、スピナーの右端にある逆三角 形のボタンをクリックしてみてください。そうすると、ドロップダウンリストが表示されるはず ですので、選択されている項目以外の項目をクリックしてみてください。そうすると、スピナー で選択されている項目が変更されて、その下のメッセージも変化するはずです。