リスナーを利用してスピナーの選択要素の変更されたことを取得する - Android

Androidアプリケーションでリスナーを用いてSpinnerコントロールが変更されたことを検出します。

Androidアプリケーションプロジェクトを新規作成します。

プロジェクトの設定

  • Project name: SimpleSpinner3
  • Build Target: Android 2.2
  • Application name: SimpleSpinner3 App
  • Package name: iPentec.SimpleSpinner3
  • Activity: SimpleSpinner3

プロジェクトが新規作成されたら、res/layoutノードのmain.xmlを開きます。デザイナが表示されるので、SpinnerコントロールとTextViewコントロールを配置します。(下図参照)

コード

コードを実装します。

コード (SimpleSpinner3.java)

package iPentec.SimpleSpinner3;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.view.*;
import android.widget.Adapter;   
import android.widget.AdapterView;   
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class SimpleSpinner3 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initSpinners();
    }
    
    private void initSpinners() {
    	Spinner spinner1 = (Spinner)findViewById(R.id.spinner1);
    	String[] labels = getResources().getStringArray(R.array.item_label);
    	ArrayAdapter<String> adapter 
          = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
    	spinner1.setAdapter(adapter);
    	
    	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
    	spinner1.setOnItemSelectedListener(new SpinnerSelectedListener());
    }
    
    public class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener{
        public void onItemSelected(AdapterView parent,View view, int position,long id) {   
            // Spinner を取得   
            Spinner spinner = (Spinner) parent;   
            // 選択されたアイテムのテキストを取得   
            String str = spinner.getSelectedItem().toString();   
            TextView textView1 = (TextView)findViewById(R.id.textView1);
            textView1.setText(str);
        } 
  	  
        // 何も選択されなかった時の動作   
        public void onNothingSelected(AdapterView parent) {   
        }    
    }
}
参考:無名クラスを使う場合
無名クラスを利用する場合はinitSpinners()メソッドを下記のように記述できます。
private void initSpinners() {
    Spinner spinner1 = (Spinner)findViewById(R.id.spinner1);
    String[] labels = getResources().getStringArray(R.array.item_label);
    ArrayAdapter<String> adapter
      = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
    spinner1.setAdapter(adapter);
    	
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {   
    // アイテムが選択された時の動作   
        public void onItemSelected(AdapterView parent,View view, int position,long id) {   
        // Spinner を取得   
        Spinner spinner = (Spinner) parent;   
        // 選択されたアイテムのテキストを取得   
        String str = spinner.getSelectedItem().toString();   
        TextView textView1 = (TextView)findViewById(R.id.textView1);
        textView1.setText(str);
    }   
 
    // 何も選択されなかった時の動作   
    public void onNothingSelected(AdapterView parent) {   
    }   
    });  
}

コード (string.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SimpleSpiiner3!</string>
    <string name="app_name">Simple Spinner Application 3</string>

	<string-array name="item_label">
		<item>Penguin</item>
		<item>Duck</item>
		<item>Goose</item>
	</string-array>
</resources>

コード (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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content"></Spinner>
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

実行結果

アプリケーションを実行すると下図の画面が表示されます。


Spinnerコントロールをクリックすると下図のアイテム選択画面が表示されます。


アイテム選択画面でDuckの要素を選択すると下図の画面に変わります。Spinnerコントロールの値がDuckに変更されるとともに、TextViewコントロールにもDuckの文字列が表示されます。


Spinnerの選択要素をGooseに変えるとTextViewのテキストも選択した要素の文字列に変更されます。


著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2023-12-09
作成日: 2011-03-10
iPentec all rights reserverd.