解决组件化开发butterknife 在 library中使用的坑

来源:互联网 发布:广州数控车床编程图纸 编辑:程序博客网 时间:2024/06/06 18:52

在Android开发中butterknife是一个很好的对资源初始化的工具,它可以使你的代码简洁通俗易懂,同时配合Android ButterKnife Zelezny插件可以让你写代码的速度提升至少20倍。

在一般app中我们都是单组件开发,什么意思呢,你只有一个主moduel,所有代码不管是java,xml,资源,依赖库都在app中,这个时候使用butterknife是非常简单的,如GitHub地址描述照着做就可以了。

  • 第一步
    在app底下的build.gradle中添加这两个依赖。
    dependencies {compile 'com.jakewharton:butterknife:8.5.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'}
  • 第二步
    在activity中如图使用即可,别忘了在oncreate方法中添加 ButterKnife.bind(this);

    class ExampleActivity extends Activity {@BindView(R2.id.user) EditText username;@BindView(R2.id.pass) EditText password;...}

    一切顺其自然,一般照着做都不会有问题。

  • 重点是当你想对项目进行组件化开发时,butterknife的使用就不是那么简单了,当然GitHub上也有说明怎么在library中使用方法,我和多数人情况一样最终发现照着作者的使用示例不管你怎么调整都将是一个大坑,最终都是无法使用。github上也有很多反馈,发现所有人都是一脸懵逼,连作者都是一脸懵逼。


11491621699_.pic_hd.jpg

下面介绍根据我无限尝试总结出的在组件化开发中library中如何使用butterknife.

  • 首先不能像github地址描述的那样使用依赖,在全局build.gradle 中请这样写,特别注意版本,不要使用最新的8.5.1 而应该使用8.4.0,不要问我为什么。
    buildscript {  repositories {      jcenter()      mavenCentral()  }  dependencies {      classpath 'com.android.tools.build:gradle:2.2.3'      classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'      classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'      // NOTE: Do not place your application dependencies here; they belong      // in the individual module build.gradle files  }}
  • 在library里正常引入butterknife,这里可以使用最新版本8.5.1。
    1、在library中build.gradle中引入插件
    apply plugin: 'com.jakewharton.butterknife'
    2、 dependencies 中添加依赖

    dependencies {compile 'com.jakewharton:butterknife:8.5.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'}

    到此使用前期工作就算做完了,下面介绍在library中如何使用和注意事项。

  • butterknife在library activity中的使用和注意事项
    1、用R2代替R findviewid

    @BindView(R2.id.textView)  TextView textView;  @BindView(R2.id.button1)  Button button1;  @BindView(R2.id.button2)  Button button2;  @BindView(R2.id.button3)  Button button3;  @BindView(R2.id.image)  ImageView image;

    2、在click方法中同样使用R2,但是找id的时候使用R。

    @OnClick({R2.id.textView, R2.id.button1, R2.id.button2, R2.id.button3, R2.id.image})  public void onViewClicked(View view) {      switch (view.getId()) {          case R.id.textView:              break;          case R.id.button1:              break;          case R.id.button2:              break;          case R.id.button3:              break;          case R.id.image:              break;      }  }

    3、特别注意library中switch-case的使用,在library中是不能使用switch- case 找id的,解决方法就是用if-else代替。

    @OnClick({R2.id.textView, R2.id.button1, R2.id.button2, R2.id.button3, R2.id.image})  public void onViewClicked(View view) {      int i = view.getId();      if (i == R.id.textView) {      } else if (i == R.id.button1) {      } else if (i == R.id.button2) {      } else if (i == R.id.button3) {      } else if (i == R.id.image) {      }  }

    到此butterknife在library中如何使用,其中有什么坑就算全部介绍完了,希望对你组件化开发有所帮助,如有其他疑问欢迎底下留言。



作者:Celery1025
链接:http://www.jianshu.com/p/c6e3f67e391e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。