美文网首页
使用annotationProcessor打造编译时的注解(三)

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

作者: lkkz | 来源:发表于2018-07-06 13:11 被阅读48次

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

    项目代码

    相关文章

      网友评论

          本文标题:使用annotationProcessor打造编译时的注解(三)

          本文链接:https://www.haomeiwen.com/subject/tvivuftx.html