前言:第一次接触到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等修饰词