新人成長記録18th
Viewのインジェクションが手間で、Viewの数が多い画面を作成することを思うと気が滅入ることから、この手間を減らせないものかと考えることが多くなってきましたので、解消方法を模索していこうと思います
最初に見つけたのはButterKnifeと言われるライブラリです
また、Viewのインジェクション以外にも便利なアノテーションがあるAndroidAnnotationというライブラリもあります
AndroidAnnotationでは、アノテーションを適用したActivityを継承した別のActivityが自動生成されます
Manifestやintent時に、その自動生成されたActivityを指定しないといけないなど、少し不便と思ったのでButterKnifeの方を紹介していきます
ButterKnifeの導入
ButterKnifeを導入するにはGradleを編集していきます
dependenciesに’com.jakewharton:butterknife:8.4.0’と’com.jakewharton:butterknife-compiler:8.4.0’を追加します
バージョン8.0未満を使用する人は、compilerの追加は不要ですが、ProGuardへ追記が必要みたいです
私は、他の記事を見て’com.jakewharton:butterknife:8.4.0’だけを追加して、@OnClickが発生せずに少し悩んでしまいました
よくよく調べるとバージョン8.0からモジュールが2つに分割されたようなので、使用時には要注意です
apply plugin: 'android-apt'
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
また、’android-apt’を使用するためにbuildscriptのdependenciesにも’com.neenbedankt.gradle.plugins:android-apt:1.8’のclasspathを追加します
ButterKnifeの使い方
それでは、コード内でのButterKnifeの使い方を書いていきます
以下の宣言でID:txt_titleのTextViewへのインジェクションが完了です
@BindView(R.id.txt_title)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//インジェクションの有効化
ButterKnife.bind(this);
}
非常に簡単にインジェクションができました
後は、普段通りに使用するだけです
また、クリックイベントについても非常に簡単になっており、以下のようになります
@OnClick({R.id.btn_A, R.id.btn_B})
public void click(View view) {
switch (view.getId()) {
case R.id.btn_A:
Toast.makeText(context, "A", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_B:
Toast.makeText(context, "B", Toast.LENGTH_SHORT).show();
break;
}
}
@OnClickには複数のViewを設定することができます
これでImplementsでOnClickListenerの実装や、インジェクションをしてからリスナーをセットするような手間を省くことができます
終わりに
機能を足すようなライブラリではなく、コードを書くのを楽にするライブラリには初めて触れましたが、中々良いものですね
未だ知らないライブラリがたくさんあるので、どんどん開発を便利にするためのライブラリを探していきたいですね
OSSのライブラリは、バージョンアップで大きな変更が発生する可能性もあるので、バージョンアップがあったからといってコンパイル時のバージョンも上げてしまうと大きな修正が必要になりますので、注意が必要です
今後もこのような便利なライブラリについても書いていこうと思います
火曜日担当:poppy
admin at 2016年12月20日 10:00:59