Spinnerを関数化して使い回そう
1画面で複数のSpinnerを使って選択出来るようにしたかったのでやり方を調べたが、検索してもヒットするのは1画面にSpinner1個を作る方法のみ…
しゃあないので色々試行錯誤してみました。
【参考】
スピナー(Spinner)を使用するには - 逆引きAndroid入門
文字列からリソースIDを取得する
【前提条件】
「array1」「array2」という配列と、「spinner1」、「spinner2」というIDのSpinnerを用意
【ソースコード】
class MainActivity : Activity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fun spinner(itemArray: Array<String>, spinnerName: String){ val adapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, itemArray) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) //引数のStringを使ってリソースのViewIDを抽出 val viewId = resources.getIdentifier(spinnerName, "id", packageName) val spinner = findViewById<Spinner>(viewId) //アダプターを設定 spinner.adapter = adapter // スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録 spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { val spinner = parent as Spinner } override fun onNothingSelected(arg0: AdapterView<*>) {} } } spinner(array1, "spinner1") spinner(array2, "spinner2") } }
※はてなってKotlin文法の自動彩色対応してないのね…