主页: https://github.com/JakeWharton/butterknife
主要是用来简化各种初始化控件的操作
ButterKnife是支持View注入的框架,有了ButterKnife可以省去很多findViewById的步骤,是JakeWharton的力作,而且ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class(xUtils的注入是运行时反射,对性能影响很大)
ButterKnife的简单使用:
1.在gradle中添加依赖,在app/build.gradle文件中的dependencies节点添加依赖
compile 'com.jakewharton:butterknife:7.0.1' ,
在AS中安装Android ButterKnife Zelezny插件
注意:在布局文件中添加控件的时候,所有需要在Activity/Fragment代码中进行控制的控件都要添加id属性
2.在Activity中注入(从7.0.0开始应该成为绑定更合适)
在setContentView();的后面增加一句话
ButterKnife.inject(this);
//高版本是
ButterKnife.bind(this);
//给指定的View绑定id
//如果找不到id,会在编译的时候报错
@InjectView(R.id.btn)
Button btn;
//高版本绑定
@Bind(R.id.tv)
TextView tv;
//这里需要注意的是,需要绑定的控件不能是private和static的
2.1在Fragment中获取View
代码与上面类似
View view = inflater.inflate(R.layout.fragment,container,false);
ButterKnife.inject(this,view);//多加一个root view参数
//记住在在Fragment中使用时,同时继承onDestroyView,并在其中调用
ButterKnife.reset(this);方法
2.2在ViewHolder中使用ButterKnife
static class ViewHolder{
@InjectView(R.id.tv_name)
TextView tvName;
@InjectView(R.id.tv_age)
TextView tvAge;
public ViewHolder(View view){
ButterKnife.inject(this,view);
}
}
//给ViewHolder类添加一个带参数View的构造方法,用注解标记每个字段,这样就不需要在getView()方法里调用findViewById()方法了,在new ViewHolder(contentView);直接传入contentView即可
2.3再也不用写setOnClickListener()
@OnClick(R.id.btn_login)
void btnLogin(View view){
Toast.makeText(this,"依赖注入点击事件",Toast.LENGTH_SHORT).show();
}
//需要注意的是:方法依然不能是private和static,并且可以有一个参数view,也可以不写,所有listener的参数都是optional的,可以写也可以不写,需要注意
的是,依然必须要调用ButterKnife.inject(this);否则事件绑定不成功
还有ListView的点击事件@OnItemClick
ClickBox的@OnCheckedChanged
可以一次指定多个id为多个View绑定一个事件处理方法
@OnClick({R.id.btn1,R.id.btn2,R.id.btn3})
view btn(){
Toast.makeText(this, "点我点我点我", Toast.LENGTH_SHORT).show();
}
注意,以上操作大部分都可以通过Android ButterKnife Zelezny插件一键生成,只要是在布局文件中添加了id属性的控件,都可以一键生成,在Activity/Fragment代码中,选中布局文件的引用,鼠标右键--Generate--Generate ButterKnife Injections,在弹出的对话框中进行选择需要生成的控件