忘记有多久没用ButterKnife ,最近又想起来使用Butterknife了,但是却遇到了很多错误,总结下。
官网:http://jakewharton.github.io/butterknife/,github: https://github.com/JakeWharton/butterknife
开始导入的是8.6.0和8.8.1,然后各种报错,说BindView是id不是常量,原谅我很久没用了。
然后呢,有开始说id找不到:
然后就改呀改,找呀找,也有说是没有clean的原因,但是我试过很多次都没用。
接着就遇到报空指针的问题,然后在issue找答案,最后发现说在9.0.0中已经解决了。
下面贴下正确操作姿势
1.project的build.gradle 配置
buildscript { repositories { google() jcenter() mavenCentral() maven { url 'https://maven.fabric.io/public' } maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-SNAPSHOT' } } allprojects { repositories { google() jcenter() maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } }
2.module中的build.gradle配置
apply plugin: 'com.jakewharton.butterknife'
implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT' annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'
3.注意
3.1 如果其他module也需要使用butterknife,也需要导入步骤2的三行代码,不然会报错找不到注解,即使你引用了其他已经使用了butterknife的module。
3.2 使用
@BindView(R2.id.action_bar) Button button1; @BindView(R2.id.tab_layout) Button tabLayout;
将R改成了R2,不然一直报错说id必须是常量。
OnClick时间之前可能是这么写的:
@OnClick({R2.id.action_bar, R2.id.tab_layout}) public void onActionBarClicked(View view) { switch (view.getId()) { case R2.id.action_bar: startActivity(CoordinatorActionBarActivity.class); break; case R2.id.tab_layout: startActivity(CoordinatorTabActivity.class); break; } }
现在必须改成这样,分开来写,或者使用if语句也可以的:
@OnClick(R2.id.action_bar) public void onActionBarClicked(View view) { startActivity(CoordinatorActionBarActivity.class); } @OnClick(R2.id.tab_layout) public void onTabClicked(View view) { startActivity(CoordinatorTabActivity.class); }