Programming Style

メニュー

初心者がアプリ開発者になるためのプログラミング学習サイト

[Android] Button:ボタンのクリックイベントを処理する

android_android-button_01

ボタンはクリックされるとイベントが実行され、アプリはそのイベントを受け取り処理を定義することができます。ここではボタンのクリックイベントを処理する方法について説明します。

 

広 告

 

目次

前提条件

動作確認端末

  • Google Nexus 5 – 5.0.0 – API21(エミュレータ)

1. onClick属性でクリックイベントを処理する

ボタンのクリックイベントを受け取るためには、<Button>タグのandroid:onClick属性を使います。この属性の値は、クリック時に呼ばれるJavaメソッド名になります。このボタンを持つレイアウトを読み込んだActivityは、ここで定義したメソッドを実装しなければなりません。

以下がサンプルコードになります。まずはレイアウトXML側の定義内容です。

 

res/layout/activity_main.xml

<RelativeLayout
    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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send"
        android:onClick="sendMessage" />

</RelativeLayout>

次にJava側の実装内容です。android:onClick属性で定義したメソッドを宣言します。

 

java/<package name>/MainActivity.java

public class MainActivity extends Activity {
    ...
    /** ボタンをクリックした時に呼ばれる */
    public void sendMessage(View view) {
        // ここに処理を記述
    }
    ...
}

Activity側で実装するメソッドは以下の条件でなければなりません。

 

  • publicメソッド
  • 戻り値はvoid
  • 引数はViewオブジェクト1つ

Note : もしonClick属性で定義したメソッド名をActivityで実装しなかった場合、画面のボタンをクリックするとNoSuchMethodExceptionの例外が発生します。

 

2. OnClickListenerでクリックイベントを処理する

JavaでView.OnClickListenerを使用することで、ボタンに対してクリックイベントリスナーを登録することができます。イベントリスナーとは、イベントが発生する動作するものです。イベントとは、今回のケースでは「ボタンをクリックする」を指します。この方式は、Fragmentでクリックイベントを処理する必要がある場合など必要になることがあります。

View.OnClickListenerのオブジェクトを作成し、ButtonオブジェクトにsetOnClickListener()メソッドで設定します。

以下がサンプルコードです。

 

java/<package name>/MainActivity.java

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = (Button) findViewById(R.id.button_send);
        button.setOnClickListener(new View.OnClickListener(){
            /** ボタンをクリックした時に呼ばれる */
            @Override
            public void onClick(View v) {
                // ここに処理を記述する
            }
        });
    }
}
Note : ここでsetOnClickListener()メソッドに渡している値は、匿名クラスと呼ばれるJavaの文法を用いています。

 

広 告