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を排除する - うさがにっき