目的

Buttonクラスのタップイベント(setOnClickListener)のちょい攻略
他にButtonに関するメモがあれば、追記していくとともに、最終的にはButton攻略にしたい。


タップイベントの実装

以下のコードでボタンのタップイベントを取得する。
例としてタップ時にボタンを黒にしている。

final Button button = findViewById(R.id.circlebutton);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //背景を黒に
        button.setBackgroundColor(Color.BLACK);
    }
});

onClick内でボタンの設定をする場合はfinalを付けないといけないみたい



タップイベントまとめて管理

管理というと語弊となるかもだけど、タップの処理を一つのクラスにまとめられる方法もある。
場合によっては、可読性が上がると思う。
ライブラリのコードを眺めていて、知った。

//...

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //....

        button = findViewById(R.id.circlebutton);
        button.setOnClickListener(this);

        //....

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.circlebutton:
                button.setBackgroundColor(Color.BLUE);
                break;
            
            //case ....

            default:
                break;
        }
    }
}

上記のようにimplements View.OnClickListenerとしてonClick(View v)を実装し、switchで押されたボタン毎に場合分けする。
onCreateではsetOnClickListenerの実装のみでタップ時の処理はonClickで書く。

  • 一つの画面にボタンを複数個設置している場合
  • onCreateでは、setOnClickListenerのみボタン設定を行う

場合に優位かなと思った。

onCreateでsetOnClickListener以外にも、ボタンのtitleやら装飾やらを行なった場合、設定が2箇所になるので、
そうなってしまったら使い勝手微妙かなと思った。