butterknife意為「黃油刀」,意思是此開源庫可以讓你的應用開發過程像用刀切黃油一樣乾淨利落。此庫的核心功能是通過註解來實現檢視的注入,從而在**中避免冗餘的方法呼叫和醜陋的內部類***。
簡單的理解「繫結」的概念,就是將view和任意乙個物件相互關聯,從而在該物件中,不用findviewbyid就能使用view上的所有子檢視,不用setonclicklistener就能給控制項設定監聽。
註解(annotation)是jdk 1.5之後引入的特性,它是一種元資料(meta-data),即描述資料的資料。元資料這個概念比較難理解,簡單的理解,就是對**的標註,告訴編譯器某一段**需要做怎樣的處理。
其實我們早就見過註解,在方法重寫時,@override就是乙個註解,去掉@override,**一樣可以執行,增加這個註解的好處,一是增加**可讀性,二是編譯器能幫你做一些自動檢查,增加**健壯性。
android引入了兩個非常有用的註解,@nullable和@nonnull,用來標識方法引數或者方法返回值等是否可以為null。以前程式設計時,為了避免nullpointerexception,最終**中往往到處都是if(obj == null)這樣的**,這是很糟糕的編碼方式,有了這兩個註解,**就清晰多了。
另外android中註解的乙個重要應用是代替列舉型別,這方面可以參考在toast中的使用。
注意需要android studio版本為2.2.0以上
dependencies
butterknife通過@bindview註解和檢視id幫你做兩件事:找到檢視和將檢視轉型為對應的子型別。例如以下的**:
class exampleactivity extends activity
}
butterknife不是通過反射,而是通過自動生成**來執行view的查詢,上面的例子中,butterknife最終自動生成的**大概是這樣的:
public void bind(exampleactivity activity)
butterknife預定義了註解@bindbool, @bindcolor, @binddimen, @binddrawable, @bindint, @bindstring,用來執行資源的繫結。如下所示:
class exampleactivity extends activity
除了activity,你也可以將任意的物件與view繫結。
例如在fragment中:
public class fancyfragment extends fragment
}
或在介面卡中:
public class myadapter extends baseadapter else
holder.name.settext("john doe");
// etc...
return view;
} static class viewholder
}}
任何原來需要使用findviewbyid的地方都可以用butterknife.bind替代。
用於繫結的api:
可以將多個檢視放在list或陣列中。
@bindviews()
listnameviews;
action和setter介面可以用來指定簡單的操作:
static final butterknife.actiondisable = new butterknife.action()
};static final butterknife.setterenabled = new butterknife.setter()
};***可以自動在方法上配置,如下:
@onclick(r.id.submit)
public void submit(view view)
***方法的引數是可選的:
@onclick(r.id.submit)
public void submit()
***方法的引數可以是具體的型別,它會被自動轉型:
@onclick(r.id.submit)
public void sayhi(button button)
也可以在單個繫結中指定多個id來進行常見的事件處理:
@onclick()
public void pickdoor(doorview door) else
}
自定義檢視自己的***可以省去id:
public class fancybutton extends button
}
fragment生命週期和activity不同,當在oncreateview中繫結檢視後,要在ondestroyview中將這些檢視置為null,butterknife提供了unbinder介面來自動做這件事,如下:
public class fancyfragment extends fragment
@override public void ondestroyview()
}
在預設情況下,如果id對應的檢視沒有找到,會拋異常。要使用可選繫結,新增@nullable或@optional註解即可:
@nullable @bindview(r.id.might_not_be_there) textview mightnotbethere;
@optional @onclick(r.id.maybe_missing) void onmaybemissingclicked()
如果註解對應的***有多個回掉方法,可以繫結任意乙個方法。每種註解都有預設的回掉方法,可以通過callback引數指定為其它的回掉方法:
@onitemselected(r.id.list_view)
void onitemselected(int position)
@onitemselected(value = r.id.maybe_missing, callback = nothing_selected)
void onnothingselected()
對於無法直接繫結檢視的時候,butterknife提供了findbyid方法簡化操作,它通過泛型操作將返回值自動轉型。
view view = layoutinflater.from(context).inflate(r.layout.thing, null);
textview firstname = butterknife.findbyid(view, r.id.first_name);
textview lastname = butterknife.findbyid(view, r.id.last_name);
imageview photo = butterknife.findbyid(view, r.id.photo);
ButterKnife的使用手冊
今天寫下butterknife的基本使用手冊 butterknife意為 黃油刀 意思是此開源庫可以讓你的應用開發過程像用刀切黃油一樣乾淨利落。此庫的核心功能是通過註解來實現檢視的注入,從而在 中避免冗餘的方法呼叫和醜陋的內部類 簡單的理解 繫結 的概念,就是將view和任意乙個物件相互關聯,從而在...
CVS使用手冊
注意 第一次匯出以後,就不是通過cvs checkout來同步檔案了,而是要進入剛才cvs checkout project name匯出的project name目錄下進行具體檔案的版本同步 新增,修改,刪除 操作。cvs的許可權管理分2種策略 基於系統檔案許可權的系統使用者管理 適合多個在lin...
sed使用手冊
原貼 http blog.chinaunix.net u 23204 showart 305602.html sed使用手冊 原創 在sed語句,正規表示式必須封閉在 中間。如 d,刪除空行。sed位址 在sed位址管理中,預設是對全域性進行操作,同時位址可以分為行位址和模式位址。如1,10d 12...