16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ButterKnifeを使ってみたまとめ

Last updated at Posted at 2018-01-12

##はじめに
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の使用方法
使用方法は公式サイトを参考にしました。
###おおまかな処理の流れ

  1. @BindViewを用いて関連付けるIDと変数を宣言する。
  2. @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
###アノテーションをつけたのに動作しない

  1. ButterKnife.bindが記述されているかを確認
  2. gradleの記述を確認
     Gradleプラグインが22未満の場合はannotationProcessorではなくaptと記述してください。
     動作しない原因となります。

###ListViewのアイテムをクリックした際のイベントについて
KeithYokomaさんの記事にありましたが、listviewにヘッダなどが登録されているとクリックされたアイテムの位置と取得する位置がずれることがあるらしいのでご注意ください。

###ver7未満からの変更点

verの違いによって書き方が違うようなのでご注意ください。

ver7未満 ver7以降
@InjectView @BindView
@InjectViews @BindView
ButterKnife.inject ButterKnife.bind
ButterKnife.reset ButterKnife.unbind
16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?