ホームへ戻る

2.2 ボタンのクリックイベントを取得する (別クラス編)


本章は、前章で作ったプロジェクトを使います。

 前章で、クリックイベントを拾う方法を紹介しましたが、イベントを拾うメソッドをActivityに実装しました。
しかし、イベントは今後大量に増えていきます。
それ全てをActivityに実装してしまうとActivityのコード量が増えて大変です。
そこで、別クラスにイベントを拾うメソッドを作ってみましょう。

まず、「ButtonClickListener」クラスを追加して下さい



そして以下のように書きます。


public class ButtonClickListener implements OnClickListener{

    private Context context;

    ButtonClickListener(Context c){
        context = c;
    }

    public void onClick(View v) {
        Toast.makeText(
                context.getApplicationContext(),
                "ボタンが押されました",
                Toast.LENGTH_LONG).show();
    }

}

(必要なimportは Ctrl + Shift + O で追加しましょう)

何故コンストラクタを追加して、引数でContextを受け取ったりしているかというと、
Toastの第一引数に指定するContextが必要だからです。

今までは

Toast.makeText(
this,

と「this」を指定していました。
Contextというのはアプリの環境情報のようなもので、Activityの親クラスです。
ですから、Activityではthisを指定すればよかったのですが、クラスが違うので、
Activityからcontextを教えてもらわなければなりません。

また、上記ソースコードにおいて

Toast.makeText(
context,

とも書けますが、あえて

Toast.makeText(
context.getApplicationContext(),

と書いています。
これはActivityのライフサイクルに違反した処理をしない為なのですが、詳細の説明は他のサイトに譲ります。
さて、呼び出し元であるActivity側は、OnClickListenerをimplementsしなくていいので、簡素になっています。


public class AndroidsCastleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn = (Button)findViewById(R.id.sampleButton);
        btn.setOnClickListener( new ButtonClickListener(this) );
    }
}


実行結果は前章と同じです。



ボタンを押すと、Toastが表示されたら成功です。

本章のプロジェクトはこちら


→分からないことがあれば掲示板で質問して下さい


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

- Remical Soft -