使用annotationProcessor打造编译时的注解(三)

如果还没看看前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的代码量还是有一点的,如果你从来没有接触编译时的注解,可能看完这代码会导致你身体不适,在这里表示抱歉,但是还是静下来心来慢慢品尝,你肯定会有收获的。一些注释在代码中已经标示的很清楚,三言两语我也说不清楚,我也不准备在这一一解释每行代码的作用是什么,每个字段作用是什么,如果需要深入了解就把代码下载下来慢慢调试。

项目代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容