Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

Spinnerをkotlinで試してみます!その2

 どうも!LSSです!

 

 昨日のSpinnerをkotlinで試してみます!その1では、Spinnerを画面上に置いて、Spinnerとして選択肢を開いたりできるところまでやりました。

 

 今回「その2」では、イベントリスナーを設定して選択した結果を反映させるまで、をやりたいと思います!

 

  ちなみに今回書くのはこんなコード!

sp0.onItemSelectedListener=object :AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
val spp=p0 as Spinner
t0.text=spp.selectedItem.toString()
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}

 

 

早速、書いていきます!

 書く場所も前回の続きから、

f:id:little_strange:20191014232032p:plain

↑このへんに書いていきますね。

 

 最初に書くのは

sp0.setOnItemSelectedListener=object :AdapterView.OnItemSelectedListener{

}

です。

 イベントリスナーって、どうしてこう、同じ単語が繰り返し出てくるんでしょうね^^;。

 

 

2つのoverrideを挟んでいきます!

 次に、今書いたうちの{}の間の行に書いていきます!

over

まで打ったところで、

f:id:little_strange:20191014235312p:plain


補完候補が出てきたので、ここは、

override fun onItemSelected(p0:…

って方を選択しておきます。

 すると、

f:id:little_strange:20191014235353p:plain

TODO行が出てくるので、これはばっさり削除しておきます。

 

 そして、TODO行があったところに更に書いていきます!

val spp=p0 as Spinner
t0.text=spp.selectedItem.toString()

 一行目のSpinner、Sを大文字にしなくちゃな点が要注意ですね。

 

 そして、もひとつoverrideを書かなきゃいけないようです。

f:id:little_strange:20191014235622p:plain

 さっきのoverride}のあと、にあたる行ですね。

 ここもまた、

over

まで打つと、

f:id:little_strange:20191014235725p:plain

補完候補が現れます。

 ここは、

override fun onNothingSelected(p0:…

というやつを選択しておきます。

 

 すると、

f:id:little_strange:20191014235817p:plain

こうなります。

 例によって、TODO行はばっさり削除します。

 今度は中は何も書かなくてOKです。

 

 実は、これで完成です!!

 あとはちょっと余分な空き行とかを整理して、完成したコードは、

 

package jp.littlestrangesoftware.a20191014spinnertest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
var list0=listOf("a","b","c")

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

val adpt0=ArrayAdapter(applicationContext,android.R.layout.simple_spinner_item,list0)
adpt0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
sp0.adapter=adpt0

sp0.onItemSelectedListener=object :AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
val spp=p0 as Spinner
t0.text=spp.selectedItem.toString()
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
}
}

こうなります!

 

ビルドしてみましょう

f:id:little_strange:20191015000419p:plain

 起動時、いきなりTextViewまで「a」 になってますね。

「スピナーでアイテムが選択された時」のイベントは最初の起動時にも発生する、という事でしょうか。

 ここで、▼を押して、

f:id:little_strange:20191015000643p:plain

違う候補…例えば「c」を選択すると、

f:id:little_strange:20191015000740p:plain

TextViewの値が、スピナーで選択した内容に書き換えられました!

 

 

あとがき

 これで一応、普通にスピナーを利用するのに最低限必要な

  • スピナーをコードから作成する
  • スピナーでの選択がされた時点で、選択内容に応じた処理を行う

の2つを実践しました^^

 

ですが、今回この記事を書くにあたって調べてみると、例えば
「スピナーの選択肢が開かれた状態での見た目(今回はデフォルトで用意されているものを利用していますが)」これをxmlで自作して、それを表示するとかいったような事もできるようで、まだまだ奥が深そうに思えました。

 今回は「とりあえず」で割り切っちゃいますけどねw

 いずれ「その3」とか「その4」とかって書く日が来るのかも?です。

 

 

 

 あと、あまり関係ないのですが、amazonでまた「スピナー」で検索かけてると 

 こういった商品がヒットしました。

「手回し洗濯機」!?

  災害時の停電の時とかに役に立ったりするのかなぁ

 あるいは家の洗濯機には入れたくないものを洗う時用に?

 

というところで、今回の記事はここまで!

 また次回、よろしくお願いしまーす!

 

AndroidStudio+Kotlin記事インデックス