読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

ButterKnifeによるイベント処理記述を簡略化

概要

以前にも扱ったButterKnifeを使ってより簡単にイベント処理を記載する

ButterKnife + ButterKnifeZeleznyを使いviewごとのfindviewbyidを排除する - うさがにっき

詳細

  • ButterKnifeZeleznyでViewのオブジェクトを取得
  • ButterKnifeでイベント処理を記載

ButterKnifeZeleznyでViewのオブジェクトを取得

以前にもやったようにViewのxmlで各オブジェクトにidを指定する

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/firstButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="First Button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:id="@+id/secondButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Second Button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:id="@+id/thirdButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Third Button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Activity, fragmentのsetContentViewの「R.layout.hogehoge」でCommand + N
f:id:tiro105:20150226020026p:plain
f:id:tiro105:20150226020039p:plain
これでidが設定されているviewのオブジェクトが作成される

ButterKnifeでイベント処理を記載

通常であればonClick処理は以下のように記載する必要がある

@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    mButton = (Button) findViewById(R.id.activity_main_button);
    mButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
         onClickButton();
      }
    });
  }

findViewByIdでオブジェクト取得して、Listener作って…
これをButterKnifeなら簡潔に表示できる

    @OnClick(R.id.firstButton)
    void onClickButton() {
        // ボタンが押されたときの処理
    }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    ButterKnife.inject(this);
  }

@injectionViewも@onClickもViewを継承したクラスであれば利用可能なので色々利用できそう

参考


Android - Butter Knifeの紹介 - Qiita