注解式框架的使用将会大大简化代码编写量,提升开发效率,主流的注解式框架有Dagger,ButterKnife,AndrodAnnotations。AndrodAnnotations配置麻烦,需要在项目清单里注册生成的子类。反射机制会占用资源内存和耗时。Dagger采用预编译技术,高效,但是对View绑定操作注解不是很方便。
}
ButterKnife用起来方便,使用简单,这里主要介绍它的使用。
到官网下载jar包,ButterKnife也已经托管到github上,
http://jakewharton.github.io/butterknife/
一.配置:
下载jar包放到libs中,配置eclipse,右键项目properties->java Compiler->Annotation Procession->勾一下Enable project special settings其他的就会自动勾上了,Factory path勾上
Enable project special settings,Add jars选中刚才导入的jar包,确定即可。
二.使用:
直接上代码
public
class
MainActivity
extends
Activity {
@Optional@InjectView(R.id.tv)
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
}
@OnClick(R.id.tv)
public void say(Button btn){
Toast.makeText(this, "你好", Toast.LENGTH_SHORT).show();
btn.setText("ButterKnife");
}
很简单吧,需要注意的是,如果click事件还有其他的组件,则声明为
@OnClick
({R.id.
tv,R.id.tv2}
)这种方式即可,在使用case来进行判断,@Optional是以防没有这个id,防止崩溃使用的,其他的事件如长按,选中等也都有相关的方法。
三.对adapter的支持
之前我们自定义的adapter会写成这种形式:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (holder == null) {
convertView = LayoutInflater.from(mcontext).inflate(
R.layout.activity_main, null);
holder = new ViewHolder();
holder.btn = (Button) convertView.findViewById(R.id.tv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btn.setText("更改");
return convertView;
}
class ViewHolder {
Button btn;
}
----------------------华丽丽的分割线-------------------------------
加入ButterKnife后,adapter只需进行很小的修改即可,代码如下
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (holder == null) {
convertView = LayoutInflater.from(mcontext).inflate(
R.layout.activity_main, null);
holder = new ViewHolder(convertView);
holder.btn = (Button)convertView.findViewById(R.id.tv);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.btn.setText("更改");
return convertView;
}
static class ViewHolder{
@InjectView(R.id.tv)
Button btn;
public ViewHolder(View view){
ButterKnife.inject(view);
}
}
ViewHolder声明为了静态的,holder = new ViewHolder中传入了 convertView。
以上就是简单的ButterKnife的使用方法