初投稿です。お手柔らかにお願いします。
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を引数に入れることで無理くり関数にする事が出来ました。しかし冗長な気が。。。
もっとスマートに出来るぜ!という方は是非コメントいただけたら助かります。