如果还没看看前2篇的请移步
使用annotationProcessor打造编译时的注解(一)
使用annotationProcessor打造编译时的注解(二)
这篇主要是对点击事件的实现
先看生成的类
public class MainActivity_ViewBinding implements Unbinder {
private MainActivity target;
private View view2131165218;
@UiThread
public MainActivity_ViewBinding(final MainActivity target, View source) {
this.target = target;
target.textView = source.findViewById(2131165323);
View view2131165218 = source.findViewById(2131165218);
this.view2131165218 = view2131165218;
view2131165218.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
target.onClick(view);
}
});
}
@Override
public void unbind() {
MainActivity target = this.target;
this.target = null;
target.textView = null;
view2131165218.setOnClickListener(null);
view2131165218 = null;
}
}
如果父类中也有用到butterknife的话,那么生成的类是这样的
public class BaseNormalActivity_ViewBinding extends BaseActivity_ViewBinding {
private BaseNormalActivity target;
@UiThread
public BaseNormalActivity_ViewBinding(final BaseNormalActivity target, View source) {
super(target, source);
this.target = target;
target.textView = source.findViewById(2131165323);
}
@Override
public void unbind() {
BaseNormalActivity target = this.target;
this.target = null;
target.textView = null;
super.unbind();
}
}
public class MainActivity_ViewBinding extends BaseNormalActivity_ViewBinding {
private MainActivity target;
private View view2131165218;
@UiThread
public MainActivity_ViewBinding(final MainActivity target, View source) {
super(target, source);
this.target = target;
target.textView2 = source.findViewById(2131165324);
View view2131165218 = source.findViewById(2131165218);
this.view2131165218 = view2131165218;
view2131165218.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
target.onClick(view);
}
});
}
@Override
public void unbind() {
MainActivity target = this.target;
this.target = null;
target.textView2 = null;
view2131165218.setOnClickListener(null);
view2131165218 = null;
super.unbind();
}
}
当然使用和butterknife完全一样
@BindView(R.id.textView2)
TextView textView2;
@OnClick({R.id.bt_click, R.id.bt_click2})
public void onClick(View view) {
}
这里对上一篇的代码进行了重构,因为注解处理器需要同时支持BindView和OnClick注解,所以就再创建了一个注解处理器ViewProcessor,之前的BindViewProcessor处理器在项目中没有删掉,但是不能处理注解了,只作为参考代码。
ViewProcessor的代码量还是有一点的,如果你从来没有接触编译时的注解,可能看完这代码会导致你身体不适,在这里表示抱歉,但是还是静下来心来慢慢品尝,你肯定会有收获的。一些注释在代码中已经标示的很清楚,三言两语我也说不清楚,我也不准备在这一一解释每行代码的作用是什么,每个字段作用是什么,如果需要深入了解就把代码下载下来慢慢调试。
网友评论