使人超讚的ButterKnife8.8.1—快捷、方面、好用!你還在等什麼

ButterKnife8.8.1的用法

什麼是ButterKnife

ButterKnife是目前經常使用的一種依託Java註解機制實現輔助代碼生成的框架;用到了註解處理器。
它是一個專一於Android系統的View注入框架,將Android視圖和回調方法綁定到成員變量和方法上;可視化一鍵生成;能夠減小大量的findViewById以及setOnClickListener代碼,是註解中相對簡單易懂的開源框架 。html

一句話歸納:依賴注入框架,主要用於註解,減小代碼。butterknife表面意思黃油刀java

ButterKnife 優點:

  • 1.強大的View綁定和Click事件處理功能,簡化代碼,提高開發效率
  • 2.方便的處理Adapter裏的ViewHolder綁定問題
  • 3.運行時不會影響APP效率,使用配置方便
  • 4.代碼清晰,可讀性強

使用心得:

  • 1.Activity ButterKnife.bind(this);必須在setContentView();以後,且父類bind綁定後,子類不須要再bind,Activity不須要unbind
  • 2.Fragment ButterKnife.bind(this, mRootView);
  • 3.屬性佈局不能用private or static 修飾,不然會報錯
  • 4.setContentView()不能經過註解實現。(其餘的有些註解框架能夠)

使用方法

  • 導入android

    導入.png
    導入.png

    gradle中須要進行導入
    gradle中須要進行導入

  • 一鍵生成資源idgit

    該圖引依凡王子的博客: www.cnblogs.com/zhengjunfei…github

    一鍵生成資源id.gif
    一鍵生成資源id.gif

英文使用說明地址:jakewharton.github.io/butterknife…c#

API文檔地址:
jakewharton.github.io/butterknife…設計模式

GitHub源碼地址:
github.com/JakeWharton…數組

很早出現的方法onCLick監聽.png
很早出現的方法onCLick監聽.png

測試效果以下bash

butterKnife8.8.1Framgment測試
butterKnife8.8.1Framgment測試

butterKnife8.8.1綁定View測試
butterKnife8.8.1綁定View測試

注意事項

  • 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)複製代碼

    bind資源

  • 綁定顏色

    @BindColor(android.R.color.background_dark)
      @ColorInt
      int whiteColor;複製代碼
  • 綁定View

    @BindView(android.R.id.button3) 
      View button3;複製代碼
  • 綁定多個View
    @BindViews({R2.id.first_name, R2.id.middle_name, R2.id.last_name})
      List<EditText> nameViews;複製代碼
  • 綁定String資源數組
    <string-array name="city">
          <item>北京市</item>
          <item>天津市</item>
          <item>哈爾濱市</item>
          <item>大連市</item>
          <item>香港市</item>
      </string-array>
       @BindArray(R.array.city)
      protected String [] mStrings;複製代碼
  • 綁定Bitmap 資源

    複製代碼

事件的bind註解

  • @OnClick---->點擊事件

  • @OnCheckedChanged ---->選中,取消選中

  • @OnEditorAction ---->軟鍵盤的功能鍵
  • @OnFocusChange ---->焦點改變
  • @OnItemClick item---->條目被點擊(
    注意這裏有坑,若是item裏面有Button等這些有點擊    的控件事件的,須要設置這些控件屬性focusable爲false)複製代碼
  • @OnItemLongClick item---->長按(返回真能夠攔截onItemClick)
  • @OnItemSelected ---->item被選擇事件
  • @OnLongClick ---->長按事件
  • @OnPageChange ---->頁面改變事件
  • @OnTextChanged ---->EditText裏面的文本變化事件
  • @OnTouch ---->觸摸事件
  • @Optional ---->

設置多個View重點講解

綁定多個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();
    }複製代碼

項目地址:

github.com/androidstar…

更多文章

2017上半年技術文章集合—184篇文章分類彙總

那些年不容錯過的智能刷新加載框

Android中自定義View座標系那些事

NDK項目實戰—高仿360手機助手之卸載監聽

高級UI特效仿直播點贊效果—一個優美炫酷的點贊動畫

Glide框架你這樣玩過嗎—基於Glide4.0的弱網下進度加載圖片

一個實現錄音和播放的小案例

相信本身,沒有作不到的,只有想不到的

若是你以爲此文對您有所幫助,微信公衆號:終端研發部

技術+職場
技術+職場
相關文章
相關標籤/搜索