【Kotlin/Android Studio】Spinnerの実装方法!プルダウンメニュー

この記事からわかること
- Android Studio/KotlinでSpinnerを使った実装方法
- プルダウンメニューを実装するには?
- ArrayAdapterの使い方
index
[open]
\ アプリをリリースしました /
参考文献:公式リファレンス:Spinner
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
Spinnerでの実装方法
実装の流れ
- レイアウトの準備
- リソースを定義する
- ArrayAdapterの作成
レイアウトの準備
レイアウトにはSpinner
タグを使用します。
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
リソースを定義する
プルダウンメニューの項目を定義します。これはいろいろな方法がありますが今回はenum
(列挙型)を使用して定義しておきます。
enum class Lang {
KOTLIN,
SWIFT,
DART
}
列挙型で定義したクラスではvalues
メソッドで列挙子をまとめた配列が受け取れます。
Lang.values().forEach {
print(it.name)
} // KOTLINSWIFTDART
ArrayAdapterの作成
ここからは「MainActivity.kt」の中に記述していきます。spinnerAdapterListener
プロパティを定義してAdapterView.OnItemSelectedListener
を作成していきます。ここに選択された時に実行したい処理と選択されなった時に実行したい処理を記述します。
class MainActivity : AppCompatActivity(){
private val spinnerAdapterListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
// 選択された時に実行したい処理
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// 選択されなかった時に実行したい処理
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
ArrayAdapterの作成
続いてArrayAdapter
クラスのインスタンスを生成します。引数にはContext
とスピナーの1アイテムのレイアウトファイルを渡します。android.R.layout.simple_spinner_item
に関してはシステムが自動で生成してくれるので準備する必要はありません。
val spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
Lang.values().forEach {
spinnerAdapter.add(it.name)
}
次にsetDropDownViewResource
メソッドを呼び出しプルダウンメニューのレイアウトを指定します。android.R.layout.simple_spinner_dropdown_item
もシステムが自動で生成してくれます。
続いてArrayAdapter
の中にアイテムを格納していきます。Lang.values
で配列を取得し中の要素をadd
メソッドで追加しています。
最後にAdapter
とspinnerAdapterListener
をセットして完了です。
spinner.adapter = spinnerAdapter
spinner.onItemSelectedListener = spinnerAdapterListener

全体のコード
class MainActivity : AppCompatActivity(){
private val spinnerAdapterListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
// 選択された時に実行したい処理
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// 選択されなかった時に実行したい処理
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val spinner:Spinner = findViewById(R.id.spinner)
val spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
Lang.values().forEach {
spinnerAdapter.add(it.name)
}
spinner.adapter = spinnerAdapter
spinner.onItemSelectedListener = spinnerAdapterListener
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
個人開発に限界を感じたらiOSに特化したプログラミングスクール「iOSアカデミア」も検討してみてください!無料相談可能で「最短・最速」でiOSエンジニアになれるように手助けしてくれます。