前回は、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
を使うのが基本- 押すたびにカウントアップするなど、変数と組み合わせると応用できる
- 複数のボタンにもそれぞれ動作を設定できる
これで「ユーザーが操作できるアプリ」を作る基礎が身につきました。
次回は「データを扱うアプリを作成:入力フォームと保存の仕組み」をテーマに、ユーザーが入力した内容を保存する方法を解説します。アプリが一気に実用的になりますので、ぜひ続けて学んでみましょう。