Annotation註解與butterknife

註解分爲三種,通常來說咱們使用的是運行時會加載及可以反射讀取的註解類型,
其餘編譯器生效的類型和編譯後放入類文件而運行期不能加載解析的對咱們沒啥用。
因此從普通理解上來看,註解要配合着反射用就行了。java

java有不少依賴注入框架,好比Spring,這類註解框架是很強大的,它們經過在運行
時讀取註解實現注入,依賴和注入都須要依靠Java的反射機制,反射對於性能敏感
的Android來講是一個硬傷,因此這類注入框架通常用於JavaEE開發。android

不過在butterknife中,其註解保留爲class,RetentionPolicy.class,依賴注入,用
的是APT(Annotation Process Tool)在編譯時生成輔助類,這些類繼承特定父類或
實現特定接口,程序運行時的開銷能夠忽略不計。app

註解至關於一種標記,在程序中加了註解就等於爲程序打上了某種標記。程序能夠利用
java的反射機制來了解你的類及各類元素上有無何種標記,針對不一樣的標記,就去作
相應的事件。標記能夠加在包,類,字段,方法,方法的參數以及局部變量上。框架

但凡Annotation起做用的場合都是有一個執行機制/調用者經過反射得到了這個元數據
而後根據它採起行動。ide

若是隻有value屬性!能夠不寫屬性名和等於號,直接寫值便可!工具

註解的做用:
1.生成文檔。最多見的,java最先提供的註解,經常使用的有@see,@param,@return
2.跟蹤代碼依賴性,實現替代配置文件功能。註解配置。
3.在編譯時進行格式檢查。如@override放在方法前,若是這個方法不是覆蓋了超類
方法,則編譯時就能檢查出。性能

注意在使用butterknife的時候,
在8.0版本,
須要添加apt工具,
在project的build文件添加,
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
在module的build文件的最上部添加,
apply plugin: 'com.neenbedankt.android-apt'
依賴dependencies那裏須要填上,
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'gradle

這樣才能經過編譯,若是不添加apt的話。
@BindView(R.id.click1)
Button b1;
在下面直接使用的話,會出現null指針異常。
另外注意不能用private或者staticui

@BindViews({R.id.click2,R.id.click3})
Button[] b;// 這裏須要用list或者array
在下面用的話,
b[0].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"點擊了2",Toast.LENGTH_SHORT).show();
}
});this

b[1].setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this,"點擊了3",Toast.LENGTH_SHORT).show();
        }
    });

@BindString(R.string.app2)
String app2;
綁定預設的字符串以及color、dimen,drawable等。能夠節省大量代碼的編寫。

凡是跟view相關須要findViewById的均可以用這個,包括lists,
不過這裏須要用到Action和Setter

還有監聽綁定,甚至能夠分組一塊兒綁定。

在碎片中注意在onDestroyView中須要unbind方法中取消綁定,
這裏在Unbinder中有解綁實例。

即便使用butterknife,也可使用findById來找,能夠減小代碼

相關文章
相關標籤/搜索