イベントリスナー (Event Listener)

イベントリスナー (イベントハンドラ) とは、ひとつのコールバックメソッドを持つViewクラスのインターフェイスです。

OnClickListener

OnClickListenerの登録には、

の2つの方法があります。

コードによる登録

コードによる登録には、その実装方法により

  • リスナーのインスタンスを生成する方法
  • リスナーを継承する方法

の2つがあります。

1. リスナーのインスタンスを生成する方法

setOnClickListener()を使用し、OnClickListenerインターフェイスを無名内部クラスとして定義することにより実装します。

Button button = (Button)findViewById(R.id.buttonID);
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // クリックの処理を実行する
    }

});
View.OnClickListener | Android Developers

2. リスナーを継承する方法

public class MyClass extends Activity implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        Button button = (Button)findViewById(R.id.buttonID);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //
    }
}

Layoutリソースによる登録

Layoutリソースでの定義時にandroid:onClick属性にコールバックメソッドを登録することでも、リスナーを登録できます。

<Button android:onClick="MethodName" />

このときコールバックメソッドはpublicで戻り値を持たず、引数にViewをひとつ持つ次の形式である必要があります。

public void MethodName(View v) {}

OnLongClickListener

new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // TODO
        return false;
    }
};

OnFocusChangeListener

new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO
    }
};

OnKeyListener

new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // TODO
        return false;
    }
};

OnTouchListener

new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO
        return false;
    }
};

OnCreateContextMenuListener

new View.OnCreateContextMenuListener() {
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        // TODO
    }
};
Androidの情報サイトから、まとめて検索