前言:第一次接觸到ButterKnife還是在兩年前,當時我還是使用Eclipse和MyEclipse進行JAVA後臺的開發(轉安卓僅僅出於個人興趣),利用業餘時間學習安卓開發並做一些簡單的小程序,findViewById是我經常使用的一個方法。一次偶然的機會到北京培訓,與安卓開發同事交流,並在獲得他的允許後查看了他的代碼。瞅了半天,竟然沒有找到findViewById,卻有一些@BindView之類的代碼,雖然之前也嘗試過對findViewById進行封裝,但是總是感覺沒有那麼簡潔美觀。這次經歷,讓我開始認識到了自己對於安卓開發是多麼的業餘。。。
好了,說了這麼多廢話之後就要進入正題了,首先配置一下ButterKnife環境:
第一步,在Project的build.gradle中添加依賴,代碼如下:
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
第二步,在app的build.gradle中添加依賴:
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
第三步,使用:
在這裏,我們利用@BindView獲得一個TextView對象並修改其的值,以及添加點擊事件
代碼如下:
public class MainActivity extends AppCompatActivity { @BindView(R.id.kn_tv) TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); tv.setText("xxx"); } @OnClick({R.id.kn_tv}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.kn_tv: Toast.makeText(this,"Click",Toast.LENGTH_SHORT).show(); break; } } }
使用ButterKnife雖然方便,但是有以下幾個注意事項:
1、ButterKnife.bind(this)這句代碼必須在setContentView之後纔可以使用,並且在非Activity中綁定需要ButterKnife.bind(this,view)其中this不可以換成getActivity等
2、在Activity中綁定後不需要手動解綁,但是在Fragment中綁定後必須在銷燬的時候解綁
3、不論是@BindView還是@OnClick等註解,都需要注意id、string等必須是正確存在的
4、使用ButterKnife需要提前安裝好插件,方法是File—Settings—搜索Zelezny找到ButterKnife插件下載並安裝—安裝完成後重啓AS
5、像代碼中一樣。@BindView對應的控件不可以使用public、private、static等修飾詞