ButterKnife 是一款基於註解的輕量級開源框架,專為 Android 開發設計,核心優勢在於:
View 綁定與點擊事件處理,大幅減少樣板碼,提升開發效率。Adapter 中 ViewHolder 綁定痛點。GitHub:https://github.com/JakeWharton/butterknife
Settings → Plugins 搜尋 ButterKnife,安裝 Android ButterKnife Zelezny。build.gradle 中引入:compile 'com.jakewharton:butterknife:7.0.1'findViewById()Activity 中使用:
@InjectView(R.id.butter_text_view_2) TextView mTextView2; // 在 setContentView() 之後調用 ButterKnife.inject(this);
注意: 被註解的 View 變數不能為 private 或 static。

Fragment 中使用:
public class SimpleFragment extends Fragment {
@InjectView(R.id.fragment_text_view)
TextView mTextView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view); // 傳入 view
mTextView.setText("TextView in Fragment are found!");
return view;
}
}
Adapter ViewHolder 中使用:
static class ViewHolder {
@InjectView(R.id.person_name)
TextView name;
public ViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
// 在 getView() 中
if (convertView == null) {
convertView = mInflater.inflate(R.layout.person_item_layout, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
setOnClickListener()@OnClick(R.id.basic_finish_a_button)
void finishA(View view) { // 參數可選
finish();
}
// 同樣需調用 ButterKnife.inject(this);
// 方法同樣不能為 private 或 static
@OnItemClick:ListView 項目點擊@OnCheckedChanged:CheckBox 狀態變更@OnClick({R.id.button_enable, R.id.button_disable, R.id.button_alpha_0, R.id.button_alpha_1})
void editViewsClicked() {
Toast.makeText(this, "You click the Button!", Toast.LENGTH_SHORT).show();
}