デフォルトSpinner自動生成

# こんな条件の時に使ってください
- 設定画面などでSpinerが４つも５つもいっぱいある
- 全部デフォルトのレイアウトや挙動でOK

# 一般的なSpinnerの定義の仕方

```java.Spinner.java
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item);	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adpter.add("aaa");
adpter.add("bbb");
adpter.add("ccc");
Spinner spinner = (Spinner) findViewById(R.id.spiner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
```

adapterにaddしていった文字をSpinnerがプルダウン表示してくれます。
これを４つも５つも書くのは面倒ですね。

# 自動でいくつも生成する

流れは簡単

```java
Map<Integer, String[]> spinnerList = new HashMap<Integer, String[]>();
```
KeyがInteger ValueがString配列のMapを定義します。

```java
spinnerList.put(R.id.spinner1, new String[] {"3秒","10秒","30秒"});
spinnerList.put(R.id.spinner2, new String[] {"りんご","みかん","パイナップル"});
spinnerList.put(R.id.spinner3, new String[] {"寺","神社"});
spinnerList.put(R.id.spinner4, new String[] {"車","自転車","飛行機","徒歩","ランニング"});
spinnerList.put(R.id.spinner5, new String[] {"山","川","海","キャンプ"});
```

次に、xmlで定義したViewIDとそのSpinerでプルダウンさせたい項目を配列で渡します。
表示させたい項目はいくつでもOKです。

これをfor文で回します。spinerSetは自作メソッドです。

```java
for(Map.Entry<Integer, String[]> spinnerItem : spinnerList.entrySet()) {
	spinnerSet(spinnerItem.getKey(),spinnerItem.getValue());
}
```

そのfor文でSpinerを繰り返し定義していきます。

```java
private void spinnerSet(int resourceId,String[] addItems){
	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
	for(String addItem : addItems){
		adapter.add(addItem); // ここで配列の項目をadd
	}
	Spinner spinner = (Spinner) findViewById(resourceId); // 渡されたViewIDをfind
	spinner.setAdapter(adapter);
	spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
	@Override
	public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
	}
	@Override
	public void onNothingSelected(AdapterView<?> arg0) {
	}
	});
}
```

## ソース全文

```java:Spinner.java

import java.util.HashMap;
import java.util.Map;

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

public class SettingActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_setting);

		Map<Integer, String[]> spinerList = new HashMap<Integer, String[]>();
		spinerList.put(R.id.spinner1, new String[] {"3秒","10秒","30秒"});
		spinerList.put(R.id.spinner2, new String[] {"りんご","みかん","パイナップル"});
		spinerList.put(R.id.spinner3, new String[] {"寺","神社"});
		spinerList.put(R.id.spinner4, new String[] {"車","自転車","飛行機","徒歩","ランニング"});
		spinerList.put(R.id.spinner5, new String[] {"山","川","海","キャンプ"});

		for(Map.Entry<Integer, String[]> spinerImte : spinerList.entrySet()) {
			spinerSet(spinerImte.getKey(),spinerImte.getValue());
		}
	}


	private void spinerSet(int resourceId,String[] addItems){
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		for(String addItem : addItems){
			adapter.add(addItem);
		}
		Spinner spinner = (Spinner) findViewById(resourceId);
		spinner.setAdapter(adapter);
		spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
			}
			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
			}
		});
	}
}
```

参考にどうぞ
https://gist.github.com/ueno-yuhei/0181900c8e81de1d9797

こんな感じに
![Screenshot_2014-05-31-00-56-27.png](https://qiita-image-store.s3.amazonaws.com/0/30138/2835719c-3e71-c0e1-7105-d46b741c6e08.png)