Android Studio ボタン(Button)クリック時のイベントをonClick()で設定する

Android Studioでボタン(Button)をクリックするイベントを作る

Androidアプリに限らず多くのアプリはボタンをユーザーが押すことで何かしらのアクションが起こるようになっています。ボタン押下時のアクションはイベントと呼ばれます。
当記事ではAndroidアプリでボタンをクリックして何かしらのイベントを発生させる方法を解説します。

ボタン(Button)クリックイベントの基本的なコードの書き方

ボタンクリックイベントのサンプルとして、ButtonをクリックするとTextViewの文字が変わるイベントを作成してみます。

MainActivity.java

package com.example.samplebuttonivent;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;


import android.view.View;

import android.widget.TextView;

import android.widget.Button;


public class MainActivity extends AppCompatActivity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


//ボタンを設置

Button button01 = findViewById(R.id.button01);


//ボタン押下時のイベント

button01.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View view){

TextView textView01 = findViewById(R.id.text_view01);

textView01.setText(“pushed button01 !”);

}

});


}

}

activity_main.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<LinearLayout

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”

android:orientation=”vertical”

tools:context=”.MainActivity” >


<LinearLayout

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:gravity=”center”

android:orientation=”vertical” >


<TextView

android:id=”@+id/text_view01″

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”before push button”

android:background=”#9999ff”

/>


<Button

android:id=”@+id/button01″

android:layout_width=”200dp”

android:layout_height=”40dp”

android:text=”Push !”

/>


</LinearLayout>


</LinearLayout>

ButtonクリックによってTextViewのテキストが変化

以下をインポートします。

  • android.view.View
  • android.widget.TextView
  • android.widget.Button

onClick()メソッドに、ボタンクリック時に実行したいイベントを書いていきます。ここではTextViewの文字を変化させる処理を書きました。
ボタン操作イベントは一般的にこの書き方で解説してあることが多いですが、Javaの匿名クラスを使った書き方なので分かりづらいかもしれません。次項では同じ処理の別の書き方を紹介します。

目次にもどる

イベントリスナクラスを定義してインスタンス化する

Javaの匿名クラスを使わないやり方です。View.OnClickListenerインタフェースを実装したクラスを作り、そのクラスのインスタンスを引数にしてsetOnClickListener()メソッドを呼び出しています。View.OnClickListenerはabstractなonClickメソッドを持っていますのでこれをオーバーライドすることで実装できます。

package com.example.samplebuttonivent;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;


import android.view.View;

import android.widget.TextView;

import android.widget.Button;


public class MainActivity extends AppCompatActivity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


//ボタンを設置

Button button01 = findViewById(R.id.button01);


ListenerClickButton listener = new ListenerClickButton();

button01.setOnClickListener(listener);


}


private class ListenerClickButton implements View.OnClickListener{

@Override

public void onClick(View view){

TextView textView01 = findViewById(R.id.text_view01);

textView01.setText(“pushed button01 !”);

}

}


}

リスナクラスを使った書き方は処理がわかりやすい反面、ボタンの数が増えるとコードも長くなってしまいます。またリスナクラスはコード下部に書かれるため、ボタン部分と離れた位置に書かれることになりますね。
匿名クラスによる書き方が好まれるのはそのような冗長さを解消するためです。
なおここではMainActivity内にプライベートなリスナクラスを定義していますが、外部クラスに分けることもできます。ですがActivityでない通常のクラスからボタンなどのビューを操作するには別の処理をする必要があります。そちらは別の記事で紹介します。

目次にもどる

匿名クラス(無名クラス)を変数に代入する

これは最初のコードとほとんど同じですが、匿名クラスをいったん変数に代入してから利用しています。Javaの匿名クラスは変数に代入することができますし、自身を参照とすることもできます。

package com.example.samplebuttonivent;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;


import android.view.View;

import android.widget.TextView;

import android.widget.Button;


public class MainActivity extends AppCompatActivity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


//ボタンを設置

Button button01 = findViewById(R.id.button01);


View.OnClickListener listener = new View.OnClickListener(){

@Override

public void onClick(View view){

TextView textView01 = findViewById(R.id.text_view01);

textView01.setText(“pushed button !”);

}

};

button01.setOnClickListener(listener);


}


}

変数を使わない場合と同じことをしていますが、あえて変数を増やす必要がない場面では直接参照の形で書いた方がスッキリします。ある処理を複数の場所で使い回すときは変数に代入した方が便利ですが、ボタン押下イベントなどはそのボタンだけに設定される処理なので変数を使う必要がない、というわけです。

目次にもどる

SNSでもご購読できます。


このエントリーをはてなブックマークに追加

コメントを残す

*