Androidアプリのクリックリスナーのまとめ


Androidアプリで、画像やテキストをタッチしたときのクリックリスナーを実装する方法はいくつかあります。

その1
レイアウトxmlで定義して、ActivityでViewを受け取る

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/bt_image"
  android:onClick="BUTTON" />

レイアウトxmlで、「android:onClick=”BUTTON”」のようにonClick属性を付与します。
これはButtonビューだけでなく、ImageViewやTextViewなど、ほとんどのViewで有効です。

public void BUTTON(View v) {
    //タッチされたときの処理
}

レイアウトを読み込んだActivity内で、このようなメソッドを記述します。
すると、タッチされるとこのBUTTON関数が呼び出されます。

私がアプリを作るときは、この実装の仕方が一番多く使います。
可読性が高く、コードがすっきりし、変数の管理もしやすいです。

その2
コードでリスナーを登録し、受け取ったViewを判定して処理を振り分ける

image1.setOnClickListener(this);
image2.setOnClickListener(this);
image3.setOnClickListener(this);

public void onClick(View v) {
	switch (v.getId()) {
	case R.id.image_id1:
		//処理その1
		break;
	case R.id.image_id2:
		//処理その2
		break;
	case R.id.image_id3:
		//処理その3
		break;
	default:
		break;
	}
}

「findViewById(R.id.○○)」でレイアウトと結びつけたView変数に、「setOnClickListener(this)」でリスナーをセットします。
onClickメソッドが呼び出されるので、IDでswitch文を振り分けて処理を書き込みます。

あまり使わない実装方法ですが、同じ属性のボタンや画像をタッチしたときや、似たような処理を行うときにはこの方法も有用です。

その3
メソッドを直接定義してセットする

image1.setOnClickListener(clickImage1);
image2.setOnClickListener(clickImage2);
image3.setOnClickListener(clickImage3);

private View.OnClickListener clickImage1 = new View.OnClickListener() {
	public void onClick(View v) {
		//処理その1
	}
};
private View.OnClickListener clickImage2 = new View.OnClickListener() {
	public void onClick(View v) {
		//処理その2
	}
};
private View.OnClickListener clickImage3 = new View.OnClickListener() {
	public void onClick(View v) {
		//処理その3
	}
};

メソッドを指定してリスナーをセットしています。
その2とやり方は似ていますが、ネストが深くなるのが嫌いな方はこのやり方でも良いかもしれません。

その4
Viewごとにリスナーを設定してメソッドも定義する

text_view.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		//処理その1
	}
});		

このやり方が便利なのは、どのViewにも関係なくリスナーを設定できる点です。
一度宣言してfindViewしたViewなら、このやり方で付与するととても楽です。

色んなコードを書くうちに、場合に合った書き方が解ってくると思います。
迷った時はこの記事をまた見に来てくださいね!

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください