LoginSignup
3

More than 5 years have passed since last update.

【Android Kotlin】Spinnerを関数化して使いまわす

Last updated at Posted at 2018-09-18

初投稿です。お手柔らかにお願いします。
1画面で複数のSpinnerを設置するために、Spinnerを関数で使い回す方法が調べても出なかったので記述します。
え、ダイアログフラグメントのほうがメジャーだって?こまけぇことは(ry

参考情報

スピナー(Spinner)を使用するには
文字列からリソースIDを取得する

前提条件

「array1」「array2」という配列と、「spinner1」、「spinner2」というIDのSpinnerを用意(細かいコードは割愛)

Kotlinで書くと以下の通り

MainActivity.kt
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")
    }
}

配列とViewIDを引数に入れることで無理くり関数にする事が出来ました。しかし冗長な気が。。。
もっとスマートに出来るぜ!という方は是非コメントいただけたら助かります。

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
3