若对依赖注入不熟悉,请阅读博客中的另外一篇IOC控制反转浅析
介绍:ButterKnife是Square公司员工JakeWharton开发的一款针对View视图对象的依赖注入库。目的是通过依赖注入方式,将View对象的初始化简化,并极大地改进了代码之间的耦合度。
特点
- 用预编译方法替代了反射机制(注意:反射机制极大地浪费资源,包括空间与时间资源)
- 在编译的过程中就创建了视图对象,编译采用的是Annotation编译器
- IOC容器从xml布局文件中,将对象取出分配给组件中对象的引用(这也是依赖注入的精髓)
优势
- 使用@BindView注解,删除findViewById调用
- 将多个视图组合在一起,然后一次性调用动作,设置,属性
- 使用@onClick方式,删除了监听器的匿名内部类
- 使用资源注解方式,删除了资源查询的调用
安装
project-level build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
module-level build.gradle:
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
}
注意:
- apply plugin: ‘android-apt’必须添加
- com.jakewharton:butterknife-compiler:8.0.1必须添加,否无无法预编译,即程序中会报空对象
例如:
class ExampleActivity extends Activity {
@BindView(R.id.user) EditText username;
@BindView(R.id.pass) EditText password;
@BindString(R.string.login_error) String loginErrorMessage;
@OnClick(R.id.submit) void submit() {
// TODO call server...
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
详细内容请查阅
github地址:https://github.com/JakeWharton/butterknife
官方使用说明:http://jakewharton.github.io/butterknife/