Android butterknifeを導入してみた
目次
概要
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 Zelezny
はButter Knife
を便利にするプラグインらしいです.
入れなくてもいいですが今回は入れたことを前提としてみます.
- Android Studio
- Preference
- Plugins
- Browse Repositories…
Butter knife Zelezny
- 右側のウィンドウに「Install」ボタンがあるのでそれをクリック
- Android Studioを再起動
これでButter Knife
とButter Knife Zelezny
の導入は完了したらしい.
使用方法
-
activity_main.xml
(View部分)を予め作成しておく.id
は振っておく.
2.
setContentView(...)
の中でCmd + N
を押す.
-
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を排除する - うさがにっき