2. 条件分岐

Kotlin

res/values/strings.xml

<resources>
    <string name="app_name">アプリ名</string>
    <string name="tv_name">お名前を入力してください</string>
    <string name="bt_click">名前の表示</string>
    <string name="bt_clear">名前のクリア</string>
</resources>

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main"
    android:padding="8dp"
    android:orientation="vertical" >
    <TextView
        android:text="@string/tv_name" />
    <EditText
        android:id="@+id/etName"
        android:inputType="textPersonName" />
    <Button
        android:id="@+id/btClick"
        android:text="@string/bt_click" />
    <Button
        android:id="@+id/btClear"
        android:text="@string/bt_clear" />
    <TextView
        android:id="@+id/tvOutput"
        android:text="" <--最初は何も表示しないので空文字を設定する
        android:textSize="25sp" />
</LinearLayout>

kotlin+java/com.example.myapp/MainActivity.kt

import ...

class MainActivity : AppCompatActivity(){
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) <--Rはresフォルダを指す

        val btClick = findViewById<Button>(R.id.btClick)
        val listener = HelloListener()
        btClick.setOnClickListener(listener)

        var btClear = findViewById<BUtton>(R.id.btClear)
        btClear.setOnClickListener(listener)
    }

    private inner class HelloListener : View.OnClickListener {
        override fun onClick(view: View) {
            val input = findViewById<EditText>(R.id.etName)
            val output = findViewById<TextView>(R.id.tvOutput)

            // idに応じて処理を分岐させる
            when(view.id) {
                R.id.btClick -> {
                    val inputStr = input.text.toString()
                    output.text = inputStr + "さん、こんにちは"
                }
                R.id.btClear -> {
                    input.setText("")
                    output.text = ""
                }
             }
        }
    }
}

override:あるクラスを継承したときに、その親クラスのメソッドを上書きすること

onCreate()メソッド:Androidアプリが起動したら最初に実行されるメソッド

【private inner class HelloListener : View.OnClickListener { の意味】

inner … HelloListenerクラスの中でクラス外のインスタンスにアクセスできるようになります。this@外部クラス名とすることで、外部クラスにアクセスできます。

View.OnClickListener … 継承です。クリックされたかどうか監視するリスナにつけられます。View.OnClickListenerをつけたら、override fun onClick(){}を書くことでクリック時のイベントを設定できます。

BACK