0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-02

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

イベント

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

イベントハンドラ

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

リスナ

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

サンプルコード

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 ->
    ...
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0