Android依賴注入框架---ButterKnife

大家在開發中,經常會使用到findViewById 和 setOnClickListener,但是當控件較多時,重複的進行控件獲取真的很煩,很鬱悶,特別是對一些有強迫症的SuperMan來講,看着一推findViewById就頭皮發麻,不過當你使用了Butter Knife之後,這些問題彷彿迎刃而解了。

1、Butter Knife是什麼?

     Butter Knife是JakeWharton創建的一個流行的開源注入庫,簡而言之,就是使用註解的方式替代傳統的findViewById和setOnCllickListener.

2、爲什麼要使用Butter Knife ?

     減少findViewById 和 設置點擊事件等監聽的操作,讓代碼更加美觀和條理性,查找方便,提高代碼的可讀性。

3、Butter Knife怎樣使用?

      環境佈置:

      當前我用的開發環境是Android studio 3.0.1,gradle 4.1 ;

      只需要在build.gradle(app)----->> dependencies中添加兩行代碼即可,代碼如下:

   implementation 'com.jakewharton:butterknife:8.8.1'
   annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

       添加完畢,點擊Sync即可,這樣就可以在項目中使用Butter Knife 了。

Androidx的朋友們注意了(需要升級到10.0.0):

    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

升級到10.0.0,你會發現報錯了:

Caused by: com.android.tools.r8.utils.AbortException: Error: Static interface methods are only supported starting with Android N (–min-api 24): void butterknife.Unbinder.lambda $ static $0()

解決辦法:

build.gardle(app)  ---> android { }內部  (defaultConfig外部),加入:

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
 }

這樣就OK了 ,歡迎指證,麼麼噠!

 

       具體使用1-->綁定與解綁:

       Activity中:onCreate方法中進行綁定,ButterKnife.bind(this);

       Fragment中:

       private Unbinder unbinder;

       在onCreateView方法中,在return view之前加入代碼:unbinder = ButterKnife.bind(this,view);

       在onDestory方法中,在super.onDestoryVIew之後,加入代碼:unbinder.unbind();

       具體使用2-->控件的findViewById:

       選中Activity的佈局文件,點擊右鍵,點擊Gererate--->Generate ButterKnife Injections--->生成對應控件的註解和點擊事件

       具體使用3-->控件的onClick設定: 

       在上述操作中生成,例如 

   @OnClick({R.id.btn_hahaha,R.id.btn_momoda})
   public void onViewClicked(View v) {
      switch (v.getId()) {
         case R.id.btn_hahaha:            
            Toast.makeText(this, "hahaha", Toast.LENGTH_SHORT).show();
            break;
         case R.id.btn_momoda:
            Toast.makeText(this, "momoda", Toast.LENGTH_SHORT).show();
            break;
         default:
            break;
      }
 
    }

      注意:

 自動生成的時候onViewClicked()方法內的參數爲空,這裏我們是自行加入了 View v ,方便對不同id的控件進行相應的處理 。

 多個控件設置點擊事件的時候,  @OnClick({R.id.btn_hahaha,R.id.btn_momoda}),括號中的大括號一定要加,不然會報錯。 

      具體使用4-->控件的其他監聽: 

      開發過程中,還可以爲view添加其他監聽,如:

      @OnLongClick,@OnPageChange,@OnPageChange.Callback,@OnTextChanged
      @OnTextChanged.Callback,@OnTouch,@OnItemLongClick,@OnCheckedChanged

     具體使用5-->綁定資源:       

     @BindColor(R.color.red) int red;   綁定顏色

     @BindString(R.string.activity_head_text) String activityHeadText;   綁定字符串

     @BindDimen(R.dimen.btn_margin_title) Float btnMarginTitle ; 綁定具體尺寸

     @BindDrawable(R.drawable.ic_launch) Drawable iconLaunch;  綁定圖片

     具體使用6-->綁定ViewHolder( ListView):    

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      if (convertView == null) {
          convertView = mInflater.inflate(R.layout.list_view_item, parent, false);
          holder = new ViewHolder(convertView);
          convertView.setTag(holder);
       } else {
         holder = (ViewHolder) convertView.getTag();
     }
      holder.imageView.setImageResource(R.mipmap.ic_launcher);
      holder.textView.setText(mData.get(position));
      return convertView;
  }    
  static class ViewHolder {
      @BindView(R.id.img_item)
      ImageView imageView;
      @BindView(R.id.tv_item)
      TextView textView;
 
      ViewHolder(View view) {
          ButterKnife.bind(this, view);
      }
  }

    使用ButterKnife對ListView中的item進行監聽,代碼如下:

    @OnItemClick(R.id.list_view)
    public void onItemClick(int position) {
          Toast.makeText(this, "momoda"+position, Toast.LENGTH_SHORT).show();
    }

 具體使用7--> 還有一些用法,如果在開發中用到,自行google 查閱一下,基本用法上述已經說明

4、如何在Android studio中添加Butter Knife插件?

      在項目中使用Butter Knife時,添加Butter Knife插件是十分有必要的,它可以讓我們在studio中更加方便的使用"黃油刀".

      操作步驟:打開Android studio --->File(頁面左上角)--->Setting--->Plugins--->搜索欄目中搜索:ButterKnife,在搜索結果中,選擇 Android ButterKnife Zelenzny (下載量多且星星比較多的那個),下載完畢後,重啓Android studio即可。

      驗證方式:在Activity中用鼠標選中onCreate佈局文件,如R.layout.activity.main,把光標移上去,右擊選擇Generate--->>再選擇Generate ButterKnife Injections(如果有這個選項,說明你安裝的ButterKnife插件已經可以正常使用了)。

緊接着你選擇Generate ButterKnife Injections 這時候會出現一個選擇框,將你要進行finViewById和onClick的及控件選中即可,同時,你也可以在此處修改變量的名稱。

5、Butter Knife在使用中需要的注意事項.

       ButterKinfe在Activity中使用時,只需要在onCreate方法中進行綁定即可,不要解除綁定,但是在Fragment中使用的時候,要在onCreateView中進行綁定,在onDestory方法中解除綁定。

      @Nullable annotation : 出現這種情況說明,目標view沒有找到,意味着這個field可能在佈局中不存在。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章