目次
概要
Switch構文というのはKotlinにはない。代わりに、When構文が存在する。
使い方にそこまで差はないものの、書き方が微妙に異なる。
基本的な書き方は以下の通り。
複数行に渡るような場合は括弧を書く必要がある。
when ([変数]) {
[値1の処理] -> {
// 値が1の時に行われる処理
}
[値2の処理] -> {
// 値が2の時に行われる処理
}
[値3の処理] -> {
// 値が3の時に行われる処理
}
else -> {
// 上記のどれにも該当しない場合の処理
}
}
ソースコード
MainFragment.kt
package com.seeking_star.test.ui.main
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.RadioGroup
import android.widget.TextView
import com.seeking_star.test.R
class MainFragment : Fragment() {
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
// TODO: Use the ViewModel
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
var view = inflater.inflate(R.layout.fragment_main, container, false)
var radioGroup = view.findViewById<RadioGroup>(R.id.magicTypeGroup)
view.findViewById<Button>(R.id.decideButton).setOnClickListener {
when (radioGroup.checkedRadioButtonId) {
R.id.radioFire -> {
view.findViewById<TextView>(R.id.textlevel1).setText("メラ")
view.findViewById<TextView>(R.id.textlevel2).setText("メラミ")
view.findViewById<TextView>(R.id.textlevel3).setText("メラゾーマ")
}
R.id.radioIce -> {
view.findViewById<TextView>(R.id.textlevel1).setText("ヒャド")
view.findViewById<TextView>(R.id.textlevel2).setText("ヒャダルコ")
view.findViewById<TextView>(R.id.textlevel3).setText("マヒャド")
}
R.id.radioWind -> {
view.findViewById<TextView>(R.id.textlevel1).setText("バギ")
view.findViewById<TextView>(R.id.textlevel2).setText("バギマ")
view.findViewById<TextView>(R.id.textlevel3).setText("バギクロス")
}
R.id.radioElectric -> {
view.findViewById<TextView>(R.id.textlevel1).setText("デイン")
view.findViewById<TextView>(R.id.textlevel2).setText("ライデイン")
view.findViewById<TextView>(R.id.textlevel3).setText("ギガデイン")
}
R.id.radioBomb -> {
view.findViewById<TextView>(R.id.textlevel1).setText("イオ")
view.findViewById<TextView>(R.id.textlevel2).setText("イオラ")
view.findViewById<TextView>(R.id.textlevel3).setText("イオナズン")
}
R.id.radioDark -> {
view.findViewById<TextView>(R.id.textlevel1).setText("ドルマ")
view.findViewById<TextView>(R.id.textlevel2).setText("ドルクマ")
view.findViewById<TextView>(R.id.textlevel3).setText("ドルマドン")
}
else -> {
view.findViewById<TextView>(R.id.textlevel1).setText("失敗")
view.findViewById<TextView>(R.id.textlevel2).setText("失敗")
view.findViewById<TextView>(R.id.textlevel3).setText("失敗")
}
}
}
return view
}
}
Kotlinxmlファイル
fragment_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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.MainFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="魔法の属性を選択してください"
android:textSize="24dp" />
<RadioGroup
android:id="@+id/magicTypeGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/radioFire"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="メラ" />
<RadioButton
android:id="@+id/radioIce"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ヒャド" />
<RadioButton
android:id="@+id/radioWind"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="バギ" />
<RadioButton
android:id="@+id/radioElectric"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="デイン" />
<RadioButton
android:id="@+id/radioBomb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="イオ" />
<RadioButton
android:id="@+id/radioDark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ドルマ" />
</RadioGroup>
<Button
android:id="@+id/decideButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="決定" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="160dp"
android:orientation="vertical">
<TextView
android:id="@+id/textlevel1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="TextView" />
<TextView
android:id="@+id/textlevel2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="TextView" />
<TextView
android:id="@+id/textlevel3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
XMLデモ動画
詳細
このWhen構文は数字(Int型など)の他、文字列(String型)も使用することができる。
また、elseは書かなくてもエラーにはならない。
また、参考ページにもあるように、whenの結果に代入値を記載することでそのまま代入をすることもできる。
参考ページ:
ヒヨコ プログラミング(ヒヨプロ).