クリック処理(匿名クラス)

広告

ボタンに対するクリック処理を行う方法を確認します。

ボタンでクリック処理を行うためにはまずボタンがクリックされた時に発生するイベントを受け取るようにする必要があります。クリックイベントを受け取るようにするには「Button」クラスの親クラスである「View」クラスで用意されている「setOnClickListener」メソッドを使います。

Register a callback to be invoked when this view is clicked.

Parameters:
  l  The callback that will run

1番目の引数には「OnClickListener」インターフェースを実装したクラスのオブジェクトを指定します。イベント発生時に呼び出されるメソッドは「onClick」メソッドとなります。(「OnClickListener」インターフェースの詳細については「OnClickListenerインターフェース」を参照して下さい)。

イベント用のインターフェースを実装する方法は大きく分けて2つあります。ここではまず匿名クラスを使う方法を試してみます。そして次のページではインターフェースを実装する方法を確認します。

匿名クラスを使う場合には、対象となるボタン毎にクリック時の処理を記述していきます。イベント発生元のビューを意識せずに個々のボタン毎に処理を記述できます。

具体的には次のように記述します。

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View.OnClickListener;

public class Test extends Activity {
    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        final Button button = new Button(this);
        button.setText("button");
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // クリック時の処理
            }
        });
        
        setContentView(button);
    }
}

サンプルプログラム

それでは実際に試してみます。プロジェクトを作成しソースコードを次のように変更しました。

Test03_01.java

package jp.javadrive.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View.OnClickListener;

public class Test03_01 extends Activity {
    private final int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;
    private int count1;
    private int count2;

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        count1 = 0;
        count2 = 0;

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        setContentView(linearLayout);

        final Button button1 = new Button(this);
        button1.setText("Count");
        button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                count1++;
                button1.setText("Count:" + count1);
            }
        });
        linearLayout.addView(button1, 
          new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));

        final Button button2 = new Button(this);
        button2.setText("Count");
        button2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                count2++;
                button2.setText("Count:" + count2);
            }
        });
        linearLayout.addView(button2, 
          new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
    }
}

ビルド後にエミュレーター上で実行します。

クリック処理(匿名クラス)

ボタンをクリックするとボタン毎にカウントを行って表示される文字列を書き換えます。

クリック処理(匿名クラス)

クリック処理(匿名クラス)

( Written by Tatsuo Ikura )