こんな条件の時に使ってください
- 設定画面などでSpinerが4つも5つもいっぱいある
- 全部デフォルトのレイアウトや挙動で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がプルダウン表示してくれます。
これを4つも5つも書くのは面倒ですね。
自動でいくつも生成する
流れは簡単
Map<Integer, String[]> spinnerList = new HashMap<Integer, String[]>();
KeyがInteger ValueがString配列のMapを定義します。
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は自作メソッドです。
for(Map.Entry<Integer, String[]> spinnerItem : spinnerList.entrySet()) {
spinnerSet(spinnerItem.getKey(),spinnerItem.getValue());
}
そのfor文でSpinerを繰り返し定義していきます。
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) {
}
});
}
ソース全文
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