Android studio 3.1 集成ButterKnife8.8.1问题总结

好久没仔细钻研AS了,最近,更新了新的版本,AndroidStudio3.1,发现,ButterKnife8.81依然存在问题!

我最常用的就是ButterKnife,浏览下了插件地址:https://github.com/JakeWharton/butterknife,已经更新到了8.8.1,我之前用的是Butter Knife8.2.1,当时也出了一些问题,详见《Android使用ButterKnife8.2.1空指针》,兴冲冲的按照官网上面最新的配置方法配置了一下,运行,出错,嗯,真的没有看错,又一次出错了。仔细的和官网上面的比对一下,完全一样,但还是任性的出错了,唉,每次升级都是一部血泪史,下面提供一下我的配置方式:

基本配置

  • 在Project的 build.gradle 中添加如下代码:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'  //添加这一行
    }
}
  • 在App的 build.gradle 中添加如下代码:
apply plugin: 'com.jakewharton.butterknife'
  • dependencies中添加:
dependencies {
  implementation 'com.jakewharton:butterknife:8.8.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

这里面下载的时候用的是implementation,使用compile也可以,但是Android Studio3.0中compile已经过时了,更何况,我这是3.1的版本,等价于compile的是api,implementation和api基本一致,存在一些小差异,大家查一下相关资料,这里不做过多解释。

Butterknife插件:zelezny
AS中没有下载使用该插件的自行下载,使用这个插件后,就很方便的帮助我们使用butterknife,而且,使用插件后,直接在 dependencies 中添加依赖就可以了.

我的项目已经运行正常了,惊不惊喜,意不意外,就是这么出人意料。

注意事项

1、在Activity 类中绑定 :ButterKnife.bind(this);必须在setContentView();之后绑定;且父类bind绑定后,子类不需要再bind。

2、在非Activity 类(eg:Fragment、ViewHold)中绑定: ButterKnife.bind(this,view);这里的this不能替换成getActivity()。

3、在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。

4、使用ButterKnife修饰的方法和控件,不能用private or static 修饰,否则会报错。错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)

5、setContentView()不能通过注解实现。(其他的有些注解框架可以)

6、使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。

7、使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。

你可能感兴趣的:(code小生)