##はじめに
Androidアプリを構築するうえで**ButterKnifeを利用すると捗る!**ということを知ったので、
導入方法や使い方をまとめます。
なお、開発環境は以下の通りです。
- AndroidStudio ver2.2.2
- ButterKnife ver8.5.1
ButterKnifeとは
様々な記事・書籍などで紹介されているため新たに導入しやすいライブラリの一つだと思います。
ButterKnifeはidとviewとをアノテーション(@~
)によって関連付けることで、
findViewByIDやOnClickListenerなどviewに関連した記述を減らすことができます。
##ButterKnifeの導入方法
- build.gradle(Project)
dependencies内に下記の記述を追加する。
dependencies{
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
- build.gradle(app)
apply plugin: 'com.android.application'
のあとに下記の記述を追加する。
apply plugin: 'com.jakewharton.butterknife'
dependencies内に下記の記述を追加する。
dependencies{
compile 'com.jakewharton:butterknife:8.5.1'
apt 'com.jakewharton:butterknife-compiler:8.5.1'
}
##ButterKnifeの使用方法
使用方法は公式サイトを参考にしました。
###おおまかな処理の流れ
-
@BindView
を用いて関連付けるIDと変数を宣言する。 -
@ButterKnife.bind()
を記述し、IDと変数を関連付ける。
###関連付けるIDとViewの宣言
コード中にある[]部分は対応したIDを入力してください。
- 一般的な書き方
@BindView(R.id.[ID])
ListView listView;
- ボタンをクリックしたときのイベント
@OnClick(R.id.[ID])
public void onClick(View v) {
// クリック時の処理を記述
}
「複数あるボタンで同一の処理をしたい」というときは下記のようにコードを書くことで実装できます
@OnClick({R.id.[ID],R.id.[ID]})
public void onClick(View v) {
// クリック時の処理を記述
}
- ListViewのItemをクリックしたときのイベント
@OnItemClick(R.id.[ID])
void OnListItemClick(int position) {
// Itemクリック時の処理
}
※上記のコードはクリックしたアイテムの位置を取得する書き方です。
###IDとviewとを関連付ける
- Activityの場合(引数:activity)
OnCreate(){
ButterKnife.bind(this);
}
- Fragmentの場合(引数:activity , view)
Fragmentの場合はviewを渡す必要があります。
OnCreateView(){
ButterKnife.bind(this,view);
}
##Tips
###アノテーションをつけたのに動作しない
- ButterKnife.bindが記述されているかを確認
- gradleの記述を確認
Gradleプラグインが22未満の場合はannotationProcessor
ではなくapt
と記述してください。
動作しない原因となります。
###ListViewのアイテムをクリックした際のイベントについて
KeithYokomaさんの記事にありましたが、listviewにヘッダなどが登録されているとクリックされたアイテムの位置と取得する位置がずれることがあるらしいのでご注意ください。
###ver7未満からの変更点
verの違いによって書き方が違うようなのでご注意ください。
ver7未満 | ver7以降 |
---|---|
@InjectView |
@BindView |
@InjectViews |
@BindView |
ButterKnife.inject |
ButterKnife.bind |
ButterKnife.reset |
ButterKnife.unbind |