好久没仔细钻研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回调方法中使用它。

更多相关文章

  1. 【Android(安卓)Developers Training】 20. 创建一个Fragment
  2. android自定义相机添加自定义水印
  3. 动态添加权限
  4. android fragments
  5. [Android]手机通过USB绑定共享电脑网络
  6. Android(安卓)如何让某个view悬浮在其他界面之上?
  7. 第一章:初入Android大门(Style 样式和Button事件)
  8. Android(安卓)contacts content provider学习小结
  9. Android(安卓)Notes 之 RecyclerView 的使用

随机推荐

  1. php之简单的文件管理(基本功能)
  2. 如何检查时间偏移是否在夏令时?
  3. PHP源码安装出现virtual memory exhauste
  4. 当excel表格单元格的格式是日期格式非文
  5. php数字操作,高精度函数,保留计算结果小数
  6. php通过$_SERVER['HTTP_USER_AGENT&#
  7. PHP 站点相对包含,路径的问题解决方法(incl
  8. PHP:如果用户没有按下提交按钮,则Mysql回滚
  9. PHP + MySQL 实现无限分类的2种方法
  10. Laravel尝试在根文件夹中存储缓存文件