ButterKnife学習の-ButterKnifeはどのように使います
24179 ワード
ButterKnife学習の-ButterKnifeはどのように使います前言 なぜButterKnife を使うのか ButterKnife紹介 簡単な例 ButterKnife基本原理 使用開始 ButterKnife のインポート方法 ButterKnife の使用方法1、バインド 2、各種注釈方式 コード混同 まとめ 前言
優秀なAndroid開発者になるには、豊富なプロジェクト経験のほかに、完備した知識体系が必要です.ここで私たちは一緒に成長して一緒に勉強して、自分を理想の自分にします.
なぜButterKnifeを使うのか
通常のAndroid開発では、Layoutのコントロールが多いときにfindViewById()を書くのは効率が悪いとよく思いますか?イベントリスニングを様々なsetxxxListenerで設定するのは煩雑だと思いますか?では、ButterKnifeは以上の問題を解決します.
ButterKnifeの紹介 ButterKnifeはAndroidシステムに焦点を当てたView注入フレームワークで、以前は常にfindView ByIdをたくさん書いてViewオブジェクトを見つけることができ、ButterKnifeがあれば簡単にこれらの手順を省くことができます.大神JakeWhartonの力作で、現在広く使われています.最も重要な点は、ButterKnifeを使用するとパフォーマンスにほとんど損失がありません.ButterKnifeが使用する注釈は、実行時に反射されるのではなく、コンパイル時に新しいclassを生成するためです.プロジェクトの統合も特に便利で、使用も特に簡単です. ButterKnifeプロジェクトアドレス ButterKnifeの優位性1、強力なViewバインドとClickなどの各種イベント処理機能、コード量を簡略化し、開発効率2、便利なAdapterの中のViewHolderバインド問題3、配置が便利で、APPの運行時効率4に影響しない、コードの可読性を強化する 単純な例
このようなコードを見ると、かなり簡潔になっているのではないでしょうか.サンプルコードを見ると、以前はfindView()の方法でxmlレイアウトのViewを見つけていましたが、ここでは@BindView()の注釈で置き換えました.そして、以前のsetOnClickListener()の代わりに@OnClick()を使用した.もちろんButterKnifeの似たような方法はたくさんありますが、後で一つ一つ紹介します.
ButterKnifeの基本原理
ButterKnifeの初期バージョンは,上記の機能を注釈+反射というランタイム解析を用いて実現し,その後性能を改善するために注釈+APTコンパイル時解析技術を用い,そこからセットテンプレートコードを生成する方式で実現した.だから、使用を始める前に、APTとは何かを簡単に理解しておきましょう.APTはAnnotation Processing Toolの略である注釈処理ツールである.一般的な手順は次のとおりです.最初に注釈を宣言する宣言期間はCLASS、すなわち@Retention(CLASS) である.は、次いで、AbstractProcessorを統合することによって注釈プロセッサをカスタマイズする. コンパイル時、コンパイラは処理する注釈を持つすべてのクラスをスキャンし、最後にAbstractProcessorのprocessメソッドを呼び出し、注釈を処理する .
使用開始
心を奮い立たせる時が来た.今、ButterKnifeの使い方を学びましょう.
ButterKnifeのインポート方法
まずmoduleのbuild.gradleでは、次のように追加されます.
ButterKnifeの使い方
1、バインド
まずButterKnifeをActivity、Fragment、またはViewにバインドします.ActivityまたはFragmentでバインドされるたびにbindの操作をBaseActivityまたはBaseFragmentに書き込むことをお勧めします.これにより、bindコードを繰り返し書く必要がなくなります.注意:バインドActivityはsetContentViewの後になければなりません.
バージョン8.4でButterKnifeがButterKnifeを除去した.unBind()メソッドは、その代わりにButterKnife.bind(this)はUnbinderの参照を返し、Unbinderのunbind()メソッドでバインドを解除します.
2、各種注釈方式コントロールの注記@BindView 複数のコントロールの注記@BindViews 文字列の注記@BindString 文字列配列の注記@BindArray Bitmapリソースの注記@BindBitmap クリックイベントバインド@OnClick(類似して@OnTouchなどもある) 注意:このようなイベントバインドは、Viewを宣言することなく、メソッドに直接注釈を付けてバインドできます.
単一ビューのクリックイベントバインド
複数のビューのクリックイベント EditTextに入力コールバック傍受を追加EditTextに入力コールバック傍受を追加する場合、コールバックのタイプを指定する必要があります.次のコード を参照してください.
コード混同
まとめ
最後にここで小さなまとめをします.Bind()の呼び出しはActivityでsetContentViewの後2、宣言修飾子はprivateとstaticでは使用できません.そうしないと、異常が発生します.3、独自のBaseActivityまたはBaseFragmentをカプセル化してButterKnifeを統一的に呼び出すことをお勧めします.bind()メソッドは、サブクラス継承後にバインディング4を行うことなく、8.4以降にunBIndメソッドを除去するButterKnifeを用いることができる.bind(this)はUnbinderの参照を返し、Unbinderのunbind()メソッドでバインド解除を行います.
最後に完成した後、Reviewで自分のコードがはっきりしたと感じたのではないでしょうか.何?それとも面倒くさいと思いますか?もっと良い方法はありませんか?もっと怠け者になってもいいですか.次の編では、プラグインで以上のコードを生成する方法についてお話しします.
優秀なAndroid開発者になるには、豊富なプロジェクト経験のほかに、完備した知識体系が必要です.ここで私たちは一緒に成長して一緒に勉強して、自分を理想の自分にします.
なぜButterKnifeを使うのか
通常のAndroid開発では、Layoutのコントロールが多いときにfindViewById()を書くのは効率が悪いとよく思いますか?イベントリスニングを様々なsetxxxListenerで設定するのは煩雑だと思いますか?では、ButterKnifeは以上の問題を解決します.
ButterKnifeの紹介
public class MainActivity extends BaseActivity<MainContract.Presenter> implements MainContract.View {
@BindView(R.id.test_tv)
TextView testTv;
@BindView(R.id.test_btn)
Button testBtn;
Unbinder unbinder;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.test_layout);
unbinder = ButterKnife.bind(this, view);
}
@OnClick({R.id.test_tv,R.id.test_btn})
protected void handleViewClick(View view){
switch(view.getId()){
case R.id.test_tv:
Log.d("TEST","tsest tv click");
break;
case R.id.test_btn:
Log.d("TEST","tsest btn click");
break;
}
}
@Override
protected void onDestory(){
super.onDestory();
if (unbinder != null && unbinder != Unbinder.EMPTY) {
unbinder.unbind();
unbinder = null;
}
}
}
このようなコードを見ると、かなり簡潔になっているのではないでしょうか.サンプルコードを見ると、以前はfindView()の方法でxmlレイアウトのViewを見つけていましたが、ここでは@BindView()の注釈で置き換えました.そして、以前のsetOnClickListener()の代わりに@OnClick()を使用した.もちろんButterKnifeの似たような方法はたくさんありますが、後で一つ一つ紹介します.
ButterKnifeの基本原理
ButterKnifeの初期バージョンは,上記の機能を注釈+反射というランタイム解析を用いて実現し,その後性能を改善するために注釈+APTコンパイル時解析技術を用い,そこからセットテンプレートコードを生成する方式で実現した.だから、使用を始める前に、APTとは何かを簡単に理解しておきましょう.APTはAnnotation Processing Toolの略である注釈処理ツールである.一般的な手順は次のとおりです.
使用開始
心を奮い立たせる時が来た.今、ButterKnifeの使い方を学びましょう.
ButterKnifeのインポート方法
まずmoduleのbuild.gradleでは、次のように追加されます.
android {
...
// Butterknife requires Java 8.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
}
ButterKnifeの使い方
1、バインド
まずButterKnifeをActivity、Fragment、またはViewにバインドします.ActivityまたはFragmentでバインドされるたびにbindの操作をBaseActivityまたはBaseFragmentに書き込むことをお勧めします.これにより、bindコードを繰り返し書く必要がなくなります.注意:バインドActivityはsetContentViewの後になければなりません.
public abstract class BaseActivity extends Activity {
private Unbinder unbinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
unbinder = ButterKnife.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (unbinder != null && unbinder != Unbinder.EMPTY) {
unbinder.unbind();
unbinder = null;
}
}
protected abstract int getContentView();
}
バージョン8.4でButterKnifeがButterKnifeを除去した.unBind()メソッドは、その代わりにButterKnife.bind(this)はUnbinderの参照を返し、Unbinderのunbind()メソッドでバインドを解除します.
2、各種注釈方式
// private static, : @BindView fields must not be private or static.
@BindView(R.id.test_tv)
protected TextView testTv;
@BindViews({R.id.test_tv,R.id.test_tv2})
protected List<TextView> testTvs;
@BindString(R.string.test_str)
protected String mTestStr;
@BindArray(R.array.test_str_array)
protected String[] testStrArray;
@BindBitmap(R.mipmap.ic_launcher)
protected Bitmap bitmap;
単一ビューのクリックイベントバインド
@OnClick(R.id.test_tv)
protected void handleViewClick(){
Log.d("TEST","test tv click");
}
複数のビューのクリックイベント
@OnClick({R.id.test_tv,R.id.test_tv2})
protected void handleMoreViewClick(View view){
int viewId = view.getId();
switch(viewId){
case R.id.test_tv:
Log.d("TEST","test tv click");
break;
case R.id.test_tv2:
Log.d("TEST","test tv2 click");
break;
}
}
@OnTextChanged(value = R.id.mobileEditText, callback = OnTextChanged.Callback.BEFORE_TEXT_CHANGED)
void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@OnTextChanged(value = R.id.mobileEditText, callback = OnTextChanged.Callback.TEXT_CHANGED)
void onTextChanged(CharSequence s, int start, int before, int count) {
}
@OnTextChanged(value = R.id.mobileEditText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
void afterTextChanged(Editable s) {
}
コード混同
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
まとめ
最後にここで小さなまとめをします.Bind()の呼び出しはActivityでsetContentViewの後2、宣言修飾子はprivateとstaticでは使用できません.そうしないと、異常が発生します.3、独自のBaseActivityまたはBaseFragmentをカプセル化してButterKnifeを統一的に呼び出すことをお勧めします.bind()メソッドは、サブクラス継承後にバインディング4を行うことなく、8.4以降にunBIndメソッドを除去するButterKnifeを用いることができる.bind(this)はUnbinderの参照を返し、Unbinderのunbind()メソッドでバインド解除を行います.
最後に完成した後、Reviewで自分のコードがはっきりしたと感じたのではないでしょうか.何?それとも面倒くさいと思いますか?もっと良い方法はありませんか?もっと怠け者になってもいいですか.次の編では、プラグインで以上のコードを生成する方法についてお話しします.