2010年11月16日火曜日

Android Spinner(スピナー)を使用する その2(ArrayAdapter)

前回Android Spinner(スピナー)を使用する その1
はスピナーのドロップダウンリストに表示する各アイテムをリソースファイルで定義しましたが、今回はArrayAdapterクラスを利用してコードから指定したいと思います。


1,アクティビティのレイアウトにスピナーを追加します。
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
 android:id="@+id/LinearLayout01" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:orientation="vertical">
    
<Spinner 
 android:id="@+id/Spinner01" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
</Spinner>

</LinearLayout>

2,スピナーのドロップダウンリストに表示するプロンプトを定義します。
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="SpinnerPrompt">選択してください。</string>
        :
</resources>

3,アクティビティクラス
ArrayAdapterクラスを使用してスピナーの設定を行います。

ArrayAdapterクラスのコンストラクタは以下のようなものがあります。
ArrayAdapter(Context context, int textViewResourceId) 
ArrayAdapter(Context context, int textViewResourceId, T[] objects) 
ArrayAdapter(Context context, int textViewResourceId, List objects)
第1引数contextにはContextオブジェクトを指定します。

第2引数textViewResourceIdにはスピナーに使用するレイアウトファイルのIDを指定します。
今回はtextViewResourceIdには、アンドロイドで定義されているandroid.R.layout.simple_spinner_itemを指定します。

第3引数objectはドロップダウンリストに表示するアイテムを指定します。
ドロップダウンリストに表示するアイテムはObject型の配列かList インターフェイス実装クラスになっています。
それぞれの要素がCharSequence インターフェイスを実装したクラスである場合は、指定した値をそのまま表示しますが
そうでなければ要素のtoString()の結果を出力します。


またArrayAdapter#setDropDownViewResource()メソッドでドロップダウンリスト部分に使用するレイアウトファイルのIDを指定します。
今回は、アンドロイドで定義されているandroid.R.layout.simple_spinner_dropdown_itemを指定します。

あとは作成したAdapterオブジェクトを、Spinner#.setAdapter()メソッドでスピナーに設定します。

MainActivty.java
package my.study.android;

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


public class MainActivty extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
  
        // ArrayAdapter を作成  
        String items[] = {"items1","items2","items3"};
        ArrayAdapter<String> adapter
                = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
        //または
        //ArrayAdapter<String> adapter
        //        = new ArrayAdapter<string>(this, android.R.layout.simple_spinner_item)
        //adapter.add("item1");
        //adapter.add("item2");
        //adapter.add("item3");
        
        // ドロップダウンリストのレイアウトを設定   
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
         
        //spinnerにAdapterを設定
        Spinner spinner  = (Spinner)this.findViewById(R.id.Spinner01);
        spinner.setAdapter(adapter);
        // Spinner に表示させるプロンプトを設定   
        spinner.setPromptId(R.string.SpinnerPrompt );
  
        // スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します
        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
            //Spinnerのドロップダウンアイテムが選択された時
            public void onItemSelected(AdapterView parent, View viw, int arg2, long arg3) {
                Spinner spinner = (Spinner)parent;
                String item = (String)spinner.getSelectedItem();
                Toast.makeText(MainActivty.this, item, Toast.LENGTH_LONG).show();
            }
            //Spinnerのドロップダウンアイテムが選択されなかった時
            public void onNothingSelected(AdapterView parent) {
            }});
    }
}

【関連項目】
Android Spinner(スピナー)を使用する その1
Android Spinner(スピナー)を使用する その2(ArrayAdapter)
Android Spinner(スピナー)を使用する その3(UIカスタマイズ)
Android Spinner(スピナー)を使用する その4(SimpleAdapter)
Android Spinner(スピナー)を使用する その5(SimpleCursorAdapter)

0 件のコメント: