DRYな備忘録

Don't Repeat Yourself.

【Android】buttonにonClickイベントのリスナーを登録する

なんか何通りか方法はあるっぽいんだけど、一番気に入ったやつで。

とりあえずざっくり

  1. layoutにボタンを追加
  2. ボタンにidをつける
  3. ActivityクラスにOnClickListenerを実装する
  4. ボタンをidでとってきて、ListenerをActivityクラスに委譲する

buttonの設置

resource/layout以下にある、activity_なんとか.xmlで、buttonを設置する。xmlで書けばよい。もしくはストーリーボード的なやつで追加する。

ボタンにidプロパティを追加する

こんな感じになるはず

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="おっぱい"
+        android:id="@+id/OppaiButton"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

ActivityクラスにOnClickListenerを実装

こうなる

public class MainEntranceActivity
-         extends Activity {
+         extends Activity implements View.OnClickListener {

そうすると、このクラスはonClickメソッドの実装を求められるので、とりあえず書くだけ書く

    public void onClick(View v) {
        Log.d(this.getLocalClassName(), "おっぱい");
        Toast.makeText(this, "おっぱい!おっぱい!", Toast.LENGTH_LONG);
        // もしこのアクティビティに複数のボタンがある場合は
        // 引数に来るViewクラスにあるgetIdでswitchとかする
    }

ここまででは、このクラスがonClickイベントをハンドリングできるだけであって、おっぱいボタンのonClickを受けるようにはなってない。なので、おっぱいボタンのクリックイベントをこのクラスが扱うようにしなければいけない。

Activityでボタンを取得し、このクラスにイベントハンドリングを委譲する

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_なんとか);

+        // Buttonインスタンスの取得
+        Button oppaiButton = (Button)this.findViewById(R.id.OppaiButton);
+        // ButtonインスタンスのリスナーをこのActivityクラスそのものにする
+        oppaiButton.setOnClickListener(this);
    }

f:id:otiai10:20150923151141p:plain

おわり。

DRYな備忘録