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文法の自動彩色対応してないのね…