【Kotlin研修1日目】イベント処理とKotlinによるアクティビティの記述


イベント/イベントハンドラ/リスナ

イベント

ユーザが画面に対して行う操作

イベントハンドラ

イベントに対応して行う処理

リスナ

イベント検出を行うもの。

サンプルコード

MainActivity.kt
package com.example.hello

import ...

// アクティビティクラスは、Activityクラス(の子クラス)を継承して作成
// AppCompatActivity: Activity
class MainActivity: AppCompatActivity() {

    // onCreate()メソッド: 起動時に実行されるメソッド
    // onCreate()メソッドはActivityクラスで定義されているため、overrideして使用
    override fun onCreate(savedInstanceState: Bundle?) {

        // 親クラス(AppCompatActivity)のonCreate()も処理しなければならない
        super.onCreate(savedInstanceState)

        // 表示する画面の設定を読み込む
        // Rクラス: リソース("@+id"など)を識別するJavaのint型定数をまとめたクラス
        // R値: Rクラス中の定数(=リソース)
        // -> R.layout.activity_main = res/layout/activity_main.xml
        setContentView(R.layout.activity_main)

        // リスナとするオブジェクトの定義
        val btClick = findViewById<Button>(R.id.btClick)
        // リスナクラスのインスタンス化(実体化)
        val listener = HelloListener()
        // オブジェクトをリスナとして設定
        btClick.setOnClickListener(listener)

        // リスナとするオブジェクトの定義
        val btClear = findViewById<Button>(R.id.btClear)
        // オブジェクトをリスナとして設定
        btClear.setOnClickListener(listener)
    }

    // ボタンをタップした場合のリスナクラス(リスナ)
    // View.OnClickListenerインタフェース: "タップ"イベントを検知するリスナインタフェース
    private inner class HelloListener: View.OnClickListener {
        // タップ時の処理(イベントハンドラ)
        // view: (タップされた)ビュー
        override fun onClick(view: View) {
            // EditText(@+id/etName)に入力された値
            val input = findViewById<EditText>(R.id.etName)
            // TextView(@+id/tvOutput)に出力する値
            val output = findViewById<TextView>(R.id.tvOutput)

            // タップされたボタンのid(R値)に応じた分岐処理
            when(view.id) {

                // "greet"ボタンの場合
                R.id.btClick -> {
                    // EditTextのtextプロパティを「String型」に変換・代入
                    // <- findViewById<EditText>()メソッドの返却型は「Editable型」
                    val inputStr = input.text.toString()

                    // TextView(ラベル)のtextプロパティの上書き
                    output.text = "Hello, $inputStr."
                }

                // "clear"ボタンの場合
                R.id.btClear -> {
                    // EditTextのtextプロパティを空にする
                    // setText(): String型の引数をtextプロパティに代入
                    input.setText("")
                    // TextView(ラベル)のtextプロパティを空にする
                    output.text = ""
                }
            }
        }
    }
}

オブジェクト式とラムダ式

MainActivity.kt
// 発展1: オブジェクト式による記述
btClick.setOnClickListener(object: View.OnClickListener {
    override fun onClick(view: View) {
        ...
    }
})

// 発展2: ラムダ式による記述
btClick.setOnClickListener { view: View ->
    ...
}