【Android Studio】ボタンのクリックイベントの書き方 – Java編

ボタンをクリックしたときの処理を書く方法は
- OnClickListener を実装する
- 匿名クラスを使う
- onClick 属性を使う(非推奨)
の3通りがあります。
この記事では簡単なサンプルアプリを用意して、それぞれのコードの書き方を紹介していきます。
準備
開発環境
Android Studio | Dolphin | 2021.3.1 |
---|---|
Android Emulator | Nexus 4(API 33) |
compileSdk / targetSdk | 33 |
minSdk | 16 |
サンプルアプリの用意
Sample という名前のプロジェクトを作成して
- activity_main.xml
- MainActivity.java
があることを前提に進めていきます。
activity_main.xml にボタンを3つ用意して、それぞれのボタンをタップしたら Snackbar を表示するコードを書いていきます。

方法① OnClickListener を実装する
ボタンが1つの場合
まずは「ボタン1」だけにクリックイベントを実装してみます。
MainActivity.java に1・8・11~14行目のコードを追加・変更します。
ここでは
- インターフェースを実装(1行目)
- ボタンにクリックリスナーをセット(8行目)
- onClick メソッドを用意(11~14行目)
を行なっています。
アプリを実行して「ボタン1」をタップすると画面下部に Snackbar が表示されます。

ボタンが複数ある場合
btn2, btn3 にも同じようにクリックリスナーをセットして、onClick メソッドを書き換えます。
ボタンが複数ある場合は「どのボタンが押されたのか」を判別する必要があります。v.getId() で押されたボタンの ID を取得できるので、これを使って判定しています。
アプリを実行して、タップしたボタンによってメッセージが変われば完成です。
方法② 匿名クラスを使う
ボタンが1つの場合
まずは「ボタン1」だけにクリックイベントを実装してみます。
MainActivity.java を開いて8~13行目を追加します。
方法①では OnClickListener インターフェースを実装しましたが、この方法②では匿名クラスとして書いています。
アプリを実行して「ボタン1」をタップすると画面下部に Snackbar が表示されます。

ボタンが複数ある場合
btn2, btn3 も同じように書くことができます。
方法③ onClick 属性を使う(非推奨)
非推奨の書き方
この方法は XML ファイルの Button ビューに onClick 属性をつける方法です。
同じメソッド名を持つ別のクラスがあるので、コードを難読化した場合など影響が出る可能性があることから、この方法は API 31 から非推奨になりました。
コード自体は動作しますし、初心者の方には分かりやすい書き方ですが、方法①②の使用も検討してください。
onClick 属性を書く
それぞれのボタンをタップした時に呼ぶメソッド名を書きます。(15・22・29行目)
ボタン1とボタン2をタップしたら showMessage メソッド、ボタン3をタップしたら deleteMessage メソッドを呼びます。この2つのメソッドは MainActivity.java に用意します。
非推奨の書き方なのでコードが黄色くなっています。このままでも良いですが、消したい場合は通知を無視する tools:ignore=”UsingOnClickInXml” を追加します。

まだ黄色くなっていますが MainActivity.java に showMessage メソッドがないことが原因なのでこのまま進めます。
「ボタン1」というテキストも黄色くなっていますが、これは strings.xml に用意した文字列を使っていないことが原因です。
ボタンが1つの場合
まずは「ボタン1」を実装してみましょう。
「ボタン1」には onClick=”showMessage” と書いたので、MainActivity.java に同じ名前のメソッドを作成します。(9~11行目)
アプリを実行して「ボタン1」をタップすると画面下部に Snackbar が表示されます。

ボタンが複数ある場合
「ボタン2」は「ボタン1」と同じ showMessage メソッド、「ボタン3」はdeleteMessage メソッドを呼びます。
まとめ
- OnClickListener を実装する
- 匿名クラスを使う
- onClick 属性を使う(非推奨)
たくさん書き方があるのでどれを使えば良いか迷うかもしれませんが、私の場合は以下を目安にしています。
- ボタンが1つで実行するコードが少ない → 方法 ②
- ボタンが複数で実行するコードが似ている → 方法 ①
- ボタンが複数で実行するコードが大きく異なる → 方法 ①か② & 用意したメソッドを呼ぶ
「絶対にこれを使う!」というのはありませんが、非推奨になった方法③は、今後使用を控えるほうが良いでしょう。