イベント/イベントハンドラ/リスナ
イベント
ユーザが画面に対して行う操作
。
イベントハンドラ
イベント
に対応して行う処理
。
リスナ
イベント
の検出
を行うもの。
サンプルコード
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 ->
...
}