前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Spinnerにラベルをつける

課題

プルダウンメニューを使いたいが
未選択時にはスピナーの項目名が表示されているようににしたい。

対策

Spinnerにはタイトルラベルのような概念はないので普通に使うとリストの1件目が表示される。
なので、タイトルっぽいテキストをおいて差し替えるか、リストの1件目をタイトルテキストにして
ドロップダウン時には表示を工夫するなどが必要になる。今回の対策は前者。

  • TextViewを用意し、SpinnerをInvisibleにする
  • TextViewのOnClickListnerでSpinner.performClick()を実行
  • Spinner.onItemSelectedListenerの選択された内容に応じてTextViewと表示を切り替え
//TextView
holder.spinnerTitle.setOnClickListener {
    holder.spinner.performClick()
}
//Spinner
holder.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                if (position == 0) {
                    holder.spinner.visibility = View.INVISIBLE
                    holder.spinnerTitle.visibility = View.VISIBLE
                } else {
                    holder.spinner.visibility = View.VISIBLE
                    holder.spinnerTitle.visibility = View.GONE
                }
            }
    }
}

SpinnerはView.GONEにしてしまうとonItemSelectedイベントが発動しないので注意