在日常的Android 重復、大量的view初始化、綁定、監聽等工作總會讓人覺得很繁瑣。這時候使用依賴注入的開源框架ButterKnife就很有必要了。
本篇簡單一種高效的View綁定方式InjectView – ButterKnife。
InjectView簡介
傳統的findViewById接收一個int類型的id參數,然后遍歷找到對應的View但是寫法過於麻煩。
InjectView 是一種基於反射的綁定方式。通過annotation,我們可以把int類型的id聲明在對應的filed上面,通過
java的反射,遍歷每個field,找到對應的id。
@InjectView(R.id.textView) View textView;
但是這個方法相對於正常的方法調用,在執行效率上會有些劣勢,而且反射並不能編譯時期的優化,使得性能的差距更加明顯。
ButterKnife簡介
ButterKnife是一種比較高效的InjectView,它是通過AnnotationProcessor實現的View Injection而不是反射所以性能上沒有什么顧慮。
ButterKnife使用
對於IDE的自動格式化代碼,可能會強行將Annotation單獨在一行顯示。
@InjectView(R.id.textView)
View textView;
你也可以進行相應的配置,IDE配置 (Android studio)

注入
ButterKnife.inject(this);
在7.0.0版本中,注冊方式也作了改變,變成了
ButterKnife.bind(this);
注:本文用的為4.0版本
Activity
public class MainActivity extends Activity {
@InjectView(R.id.tv_token)
TextView tv_token;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
}
}
Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
ButterKnife.inject(this,view);
};
OnClick
@OnClick({R.id.tv_token})
void onClick(View view){
switch (view.getId()){
case R.id.tv_token:
Toast.makeText(this, "click!", Toast.LENGTH_SHORT).show();
break;
}
}
