Android butterknifeを導入してみた

2017年06月19日 公開

目次

  1. 概要
  2. 導入方法
    1. 1. Butter Knifeをinstall
    2. 2. (optional) Butter Knife Zeleznyをinstall
  3. 使用方法
  4. ハマったポイント
    1. バージョンアップにより.injectから.bindになってた?
    2. import部分が他のところに書いていなくて困った.
  5. まとめ
  6. 参考

概要

Android用のプラグイン (butterknife - github)

onClickListenerとかfindViewByID(...)みたいなAndroidでよくあるめんどくさいやつが簡単になる(!らしい)のでとりあえず使ってみます.

導入方法

1. Butter Knifeをinstall

build.gradleに以下のコードを挿入しインストール.

dependencies {
  compile 'com.jakewharton:butterknife:8.6.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
}

2. (optional) Butter Knife Zeleznyをinstall

Butter Knife ZeleznyButter Knifeを便利にするプラグインらしいです.
入れなくてもいいですが今回は入れたことを前提としてみます.

  1. Android Studio
  2. Preference
  3. Plugins
  4. Browse Repositories…
  5. Butter knife Zelezny
  6. 右側のウィンドウに「Install」ボタンがあるのでそれをクリック
  7. Android Studioを再起動

これでButter KnifeButter Knife Zeleznyの導入は完了したらしい.

使用方法

  1. activity_main.xml(View部分)を予め作成しておく.idは振っておく.

2.

  setContentView(...)

の中でCmd + Nを押す.

  1. Generateウィンドウが出てくるのでGenerate ButterKnife Injectionsをクリック.(必要なviewにはonClickにチェックをつけておくと良い.)

これで勝手に@bindなどが挿入されます.

あとはonClickメソッドの中に書きたいことを書くだけ.

Butter Knife Zeleznyによって自動生成されたコードを示しておきます.

class内に作成されたフィールドは以下のような感じ.

@BindView(R.id.startActivity)
Button startActivity;
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.isEnabledBluetooth)
ToggleButton isEnabledBluetooth;
@BindView(R.id.isEnabledMagnetic)
ToggleButton isEnabledMagnetic;
@BindView(R.id.isEnabledGyro)
ToggleButton isEnabledGyro;
@BindView(R.id.isEnabledParticle)
ToggleButton isEnabledParticle;
@BindView(R.id.isEnabledMap)
ToggleButton isEnabledMap;
@BindView(R.id.toggledMenu)
LinearLayout toggledMenu;

onCreateは以下のような感じ.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
}

onClickはこんな感じ.(Toastはテストのために加筆しました.)

@OnClick(R.id.startActivity)
public void onViewClicked() {
    Toast.makeText(this, "Clicked!", Toast.LENGTH_LONG).show();
}

ハマったポイント

バージョンアップにより.injectから.bindになってた?

参考サイトをいろいろ見てるとonCreateの部分が

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.inject(this);
}

となっており,ButterKnife.inject(this)でエラーが発生して困った. ButterKnife.bind(this)にすることで解決.

import部分が他のところに書いていなくて困った.

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

参考サイトは結構コードだけしかかいてなくて,importがよくわからずに困った.
ので一応載せておきます.これだけ書いてあればとりあえず動く.

まとめ

  • Butter Knifeの導入ができた.
  • Butter Knife Zeleznyはとっても便利.
  • バージョン違いは大変だけどプラグインありがとう.
  • 使用感などは何か感じたら追記するかも.

参考

Butter Knife - 公式
Butter Knifeが素敵だ - Qiita
Butter Knifeを使ってコードをきれいにする - Qiita
ButterKnife + ButterKnifeZeleznyを使いviewごとのfindviewbyidを排除する - うさがにっき

Recent Posts