ButterKnife是目前經常使用的一種依託Java註解機制實現輔助代碼生成的框架;用到了註解處理器。
它是一個專一於Android系統的View注入框架,將Android視圖和回調方法綁定到成員變量和方法上;可視化一鍵生成;能夠減小大量的findViewById以及setOnClickListener代碼,是註解中相對簡單易懂的開源框架 。html
一句話歸納:依賴注入框架,主要用於註解,減小代碼。butterknife表面意思黃油刀java
導入android
一鍵生成資源idgit
該圖引依凡王子的博客: www.cnblogs.com/zhengjunfei…github
英文使用說明地址:jakewharton.github.io/butterknife…c#
API文檔地址:
jakewharton.github.io/butterknife…設計模式GitHub源碼地址:
github.com/JakeWharton…數組
測試效果以下bash
1)在Activity 類中綁定 :ButterKnife.bind(this);微信
必須在setContentView();以後綁定;且父類bind綁定後,子類不須要再bind。
2)在非Activity 類(eg:Fragment、ViewHold)中綁定:
ButterKnife.bind(this,view);
這裏的this不能替換成getActivity()。
3)activity中不須要解綁
在Activity中不須要作解綁操做,在Fragment 中必須在onDestroyView()中作解綁操做。
4)ButterKnife的修飾符
使用ButterKnife修飾的方法和控件,不能用private or static 修飾,不然會報錯。
5)setContentView()不能經過註解實現。(其餘的有些註解框架能夠)
6)對於mvc設計模式
使用Activity爲根視圖綁定任意對象時,若是你使用相似MVC的設計模式你能夠在Activity 調用ButterKnife.bind(this, activity),來綁定Controller。
7)子View的相關綁定
使用ButterKnife.bind(this,view)綁定一個view的子節點字段。若是你在子View的佈局裏或者自定義view的構造方法裏 使用了inflate,你能夠馬上調用此方法。或者,從XML inflate來的自定義view類型能夠在onFinishInflate回調方法中使用它。
8)修飾類型不能是:private 或者 static
不然會報錯:錯誤:
@BindView fields must not be private or static. (com.ButterknifeActivity.button)複製代碼
綁定顏色
@BindColor(android.R.color.background_dark)
@ColorInt
int whiteColor;複製代碼
綁定View
@BindView(android.R.id.button3)
View button3;複製代碼
@BindViews({R2.id.first_name, R2.id.middle_name, R2.id.last_name})
List<EditText> nameViews;複製代碼
<string-array name="city">
<item>北京市</item>
<item>天津市</item>
<item>哈爾濱市</item>
<item>大連市</item>
<item>香港市</item>
</string-array>
@BindArray(R.array.city)
protected String [] mStrings;複製代碼
綁定Bitmap 資源
複製代碼
@OnClick---->點擊事件
@OnCheckedChanged ---->選中,取消選中
注意這裏有坑,若是item裏面有Button等這些有點擊 的控件事件的,須要設置這些控件屬性focusable爲false)複製代碼
綁定多個OnCLick
@OnClick({R.id.view_test1,R.id.btn_s01,R.id.btn_s02})
public void onCLick1(View view){
switch (view.getId()){
case R.id.view_test1:
iv_f2.setImageBitmap(rabot);
break;
case R.id.btn_s01:
GetToast.useString(getActivity(),"按鈕1");
break;
case R.id.btn_s02:
GetToast.useString(getActivity(),"按鈕2");
break;
}
}複製代碼
綁定listView的OnItemClick
@OnItemClick(R.id.lv_List)
public void OnItemClick(int index){
GetToast.useString(getActivity(),"this is OnItemClick the index :"+index);
}複製代碼
綁定listView的OnItemLongClick
@OnItemLongClick(R.id.lv_List)
public boolean OnItemLongClick(int index){
GetToast.useString(getActivity(),"this is the OnItemLongClick index :"+index);
return true;
}複製代碼
綁定ChexkBox的OnItemLongClick
@OnCheckedChanged(R.id.cb_cjeck)
public void OnCheckedChanged(boolean isChecked){
if(isChecked){
GetToast.useString(getActivity(),"選中了");
return ;
}
GetToast.useString(getActivity(),"沒選中...");
}複製代碼
單個綁定onClick事件
@OnClick(R.id.f1)
public void f1() {//動態添加Fragment
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
//transaction.add(R.id.fragment_container, fragment1);
transaction.replace(R.id.fragment_container,fragment1);
transaction.commit();
}
@OnClick( R.id.f2 )
public void f2(){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
transaction.replace(R.id.fragment_container,fragment2);
// transaction.add(R.id.fragment_container, fragment2);
transaction.commit();
}複製代碼
項目地址:
Glide框架你這樣玩過嗎—基於Glide4.0的弱網下進度加載圖片
若是你以爲此文對您有所幫助,微信公衆號:終端研發部