【Kotlin研修1日目】イベント処理とKotlinによるアクティビティの記述
8953 ワード
イベント/イベントハンドラ/リスナ
イベント
ユーザが画面に対して行う操作
。
イベントハンドラ
イベント
に対応して行う処理
。
リスナ
イベント
の検出
を行うもの。
サンプルコード
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 ->
...
}
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 ->
...
}
Author And Source
この問題について(【Kotlin研修1日目】イベント処理とKotlinによるアクティビティの記述), 我々は、より多くの情報をここで見つけました https://qiita.com/b150005/items/20209e1c096e9e7a43bd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .