別のパターンの 1 つは、コンテナー クラス自体をリスナーにすることです。
public class MyClass implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button is clicked
}
public void initOrSomething() {
button.setOnClickListener(this);
}
}
ただし、異なる動作が必要なボタンが複数ある場合は、問題が発生する可能性があります。
もう 1 つの方法は、ボタンごとに異なるリスナー クラスを用意することです。
public class Button1Listener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button1 is clicked
}
}
public class Button2Listener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button2 is clicked
}
}
button1.setOnClickListener(new Button1Listener());
button2.setOnClickListener(new Button2Listener());
匿名内部クラスは、2 番目のパターンをよりコンパクトに表現したものです。
編集: 両方のパターンのバリエーションが可能です。どちらのボタンがクリックされたかを判断するために View オブジェクトの内容が調べられるか、リスナーの動作を変更するためにコンストラクター引数がリスナー クラスに渡されます。