【Android】ボタンでクリックイベントを実装する方法
- 作成日:2022/01/21
ボタン押下時にイベントを発生させる方法です。 なるべくわかりやすく丁寧に説明します。
クリックイベントのやり方
ボタン押下時のクリックイベントはいくつか書き方がありますが、やることは同じです。
- ボタンにリスナーを登録する(setOnClickListener)
- ボタン押下時の処理を書く(onClick)
これらを実現するための書き方ですが、主に以下のような書き方があります。
- OnClickListenerインタフェースを継承する方法
- 無名クラスを使う方法
インターフェースや無名クラスについて、よくわからない方は以下で解説しているので参考にしてください。
では、解説していきます。
OnClickListenerインタフェースを継承する方法
ボタンクリックを実装したいクラスにOnClickListenerインターフェースを継承する方法です。 まず、レイアウトファイルは次のようにボタンを1つだけ設置するとします。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="300dp"
android:layout_height="100dp"
android:layout_marginTop="20dp"
android:text="sample"
android:layout_gravity="center"
android:textSize="30sp"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
次にソースコードです。ボタン押下時にログ出力をする単純なコードです。
package com.example.androidkoko;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.btn);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("ログ出力:", "ボタンが押下されました");
}
}
まず、View.OnClickListenerインターフェースをimplementsを使い継承します(12行目)。 クリックイベントを使う事前準備みたいなものです。
次に、クリックイベントを実装するために、リスナーをボタンに登録します。 20行目のsetOnClickListenerでリスナーをボタンに組み込んでいます。 引数はView.OnClickListener型のインスタンスです。 自分自身のクラスがOnClickListenerを継承しているので、引数はthisでOKです。 これでボタンにリスナーが追加されました。
ボタン押下時に実行されるのがonClickメソッドです。 onClickは12行目で継承したOnClickListenerインターフェースのメソッドなので、オーバーライドします(24行目)。 このonClickメソッドの中身がボタン押下時に実行される処理です。
少し難しいかもしれませんが、イメージとしてはこんな感じです。
無名クラスを使う方法
無名クラスを使えばOnClickListenerインターフェースを継承しなくてもクリックイベントを実装できます。
レイアウトファイルは先ほどと同じくボタンを1つ配置しているものとします。ソースコードは以下のようになります。
package com.example.androidkoko;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.btn);
btn1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Log.d("ログ出力:", "ボタンが押下されました");
}
});
}
}
20行目のsetOnClickListenerでボタンにリスナーを登録します。 引数はView.OnClickListene型のインスタンスなので、ここで無名クラスを宣言します。
OnClickListeneインターフェースはonClickメソッドを持っているので忘れずにオーバーライドしましょう。 これがクリックイベントの処理になります。