前回は、Androidアプリの画面設計(レイアウトとUI設計)について学びました。画面にボタンやテキストを配置できるようになると、次に挑戦したいのが「動作をつける」ことです。
アプリがユーザーとやりとりするためには、イベント処理が必要です。例えば「ボタンを押したら文字が変わる」「チェックボックスを選んだら表示が切り替わる」といった仕組みです。
この記事では、Androidアプリの基本的なイベント処理を、Kotlinを使った実例を交えながら解説します。初心者でも理解しやすいように、ボタンのクリックイベントを中心に紹介しますので、ぜひ一緒に手を動かしてみてください。
イベント処理とは?
アプリの操作は「ユーザーのアクション」と「アプリの反応」の組み合わせで成り立ちます。
- ユーザーのアクション:ボタンを押す、画面をタップする、文字を入力する
- アプリの反応:テキストを変える、画面を切り替える、音を鳴らす
この「ユーザーのアクション」に対して「どんな処理をするか」を書くことを イベント処理 と呼びます。
Androidでは、最も基本的なイベントが クリックイベント(onClick) です。
ボタンを押してテキストを変える(基本例)
まずはシンプルな例として「ボタンを押すとテキストが変わる」アプリを作ってみましょう。
1. XMLレイアウト
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="まだ押されていません"
        android:textSize="20sp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toTopOf="@id/button"
        android:layout_marginBottom="32dp"/>
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="押してみよう"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
画面中央に「テキスト」、下に「ボタン」を配置しました。
2. Kotlinコード
package com.example.eventsample
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 部品を取得
        val textView: TextView = findViewById(R.id.textView)
        val button: Button = findViewById(R.id.button)
        // ボタンが押されたときの処理
        button.setOnClickListener {
            textView.text = "ボタンが押されました!"
        }
    }
}
これで、ボタンを押すとテキストの内容が変わります。
setOnClickListenerを理解しよう
イベント処理でよく使うのが setOnClickListener です。
button.setOnClickListener {
    // ボタンが押されたときの処理を書く
}
{ } の中に書かれた処理が、ボタンを押したときに実行されます。
例えば:
button.setOnClickListener {
    textView.text = "押した回数: 1"
}
このようにすると、ボタンを押すとテキストが「押した回数: 1」に変わります。
ボタンを押すたびにカウントアップする
もう少し発展させて「押すたびにカウントアップする」例を作ってみましょう。
var count = 0
button.setOnClickListener {
    count++
    textView.text = "押した回数: $count"
}
このように変数を使うことで、押すたびに数字が増えていく仕組みを作れます。
アプリらしさがぐっと出てきますね。
複数のボタンを使う場合
ボタンが複数ある場合は、それぞれにイベント処理を設定します。
val button1: Button = findViewById(R.id.button1)
val button2: Button = findViewById(R.id.button2)
button1.setOnClickListener {
    textView.text = "ボタン1が押されました"
}
button2.setOnClickListener {
    textView.text = "ボタン2が押されました"
}
このように、ボタンごとに動作を分けられます。
onClick属性を使う方法
XMLに直接イベントを指定することもできます。
<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="押してね"
    android:onClick="onButtonClick"/>
そして、Kotlin側に以下を追加します。
fun onButtonClick(view: View) {
    val textView: TextView = findViewById(R.id.textView)
    textView.text = "onClickで処理しました"
}
ただし、コードが増えてくると管理が大変になるため、通常は setOnClickListener を使うのがおすすめです。
よくあるエラーと解決法
イベント処理を学ぶと、次のようなエラーに出会うことがあります。
- 「Unresolved reference」エラー
 →findViewByIdで取得した部品の型が間違っている可能性があります。
 (TextViewをButtonにキャストしている、など)
- ボタンを押しても反応しない
 → XMLでidが正しく設定されているか確認しましょう。
- アプリが強制終了する
 → nullの部品にアクセスしている可能性があります。レイアウトとコードの対応をチェックしてください。
まとめ
今回は、Androidアプリ開発における イベント処理と基本コード を解説しました。
- イベント処理とは「ユーザー操作」に対して「アプリの反応」を記述すること
- setOnClickListenerを使うのが基本
- 押すたびにカウントアップするなど、変数と組み合わせると応用できる
- 複数のボタンにもそれぞれ動作を設定できる
これで「ユーザーが操作できるアプリ」を作る基礎が身につきました。
次回は「データを扱うアプリを作成:入力フォームと保存の仕組み」をテーマに、ユーザーが入力した内容を保存する方法を解説します。アプリが一気に実用的になりますので、ぜひ続けて学んでみましょう。

