rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 Spinner ドロップダウンリストの位置番号(インデックス番号)を取得する

2022 May 14.

端末

android 11 ( APIレベル 30 )

概要
  • ドロップダウン表示する文字列の配列を作る
  • Spinnerを置くアクティビティにAdapterView.OnItemSelectedListenerインターフェースを組み込み、onItemSelected()とonNothingSelected()を実装する
    onItemSelected()
    Spinner#selectedItemPosition()でドロップダウンリストの位置番号(インデックス番号)を取得する
    onNothingSelected()

    利用しないので、何も行わない実装とする

  • ArrayAdapterにドロップダウン表示する文字列の配列を組み込む
  • SpinnerにArrayAdapterをセットする

    サンプルコード

    app/res/values/arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="myItems">
        <item>@string/item1</item>
        <item>@string/item2</item>
        <item>@string/item3</item>
    </array>
</resources>


MainActivity.kt

package net.sytes.rokkosan.myspinnerselectbyid

/*
2022 May 14.
Ryuichi Hashimoto.

referrence
    http://pg-box.jp/blog/20140328/pulldown#getSelectedItemId
    https://developer.android.com/guide/topics/ui/controls/spinner?hl=ja
*/

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {

    val spinner1: Spinner by lazy { findViewById<Spinner>(R.id.spinner1) }
    val textViewInfo1: TextView by lazy { findViewById<TextView>(R.id.textVewInfo1) }

    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        when (spinner1.selectedItemPosition) {
            0 -> { textViewInfo1.text = getString(R.string.item1) }
            1 -> { textViewInfo1.text = getString(R.string.item2) }
            2 -> { textViewInfo1.text = getString(R.string.item3) }
            else -> { textViewInfo1.text = getString(R.string.error) }
        }
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setAdapterSpinner()
        spinner1.onItemSelectedListener = this
    }

    private fun setAdapterSpinner() {
        val myAdapter = ArrayAdapter.createFromResource(
                this, R.array.myItems, android.R.layout.simple_spinner_item)
            // simple_spinner_item
            //     プラットフォームによってデフォルトで提供されているスピナーの外観レイアウト
        myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            // simple_spinner_dropdown_item
            //     プラットフォームで定義された標準のドロップダウンレイアウト
        spinner1.setAdapter(myAdapter)
    }
}


strings.xml

<resources>
    <string name="app_name">MySpinnerSelectById</string>
    <string name="item1">アイテム1</string>
    <string name="item2">アイテム2</string>
    <string name="item3">アイテム3</string>
    <string name="error">エラー</string>
</resources>


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        app:layout_constraintBottom_toTopOf="@id/textVewInfo1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textVewInfo1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/spinner1"
        />

</androidx.constraintlayout.widget.ConstraintLayout>