8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

デフォルトSpinner自動生成

Last updated at Posted at 2014-05-30

こんな条件の時に使ってください

  • 設定画面などで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

こんな感じに
Screenshot_2014-05-31-00-56-27.png

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?