butterknife 8.5.1配置使用
1、在整个项目 build.gradle
文件下做如下配置
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
2、在当前module build.gradle
文件下做如下配置
apply plugin: 'com.jakewharton.butterknife'
dependencies {
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
3、使用示例
public class TestView extends AppCompatActivity {
@BindView(R.id.test_txt)
TextView testTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
testTxt.setText("ButterKnife");
}
}
4、使用butterknife插件,快速生成,AndroidStudio Setting -> Plugins -> 搜索Android ButterKnife Zelezny
然后重启Studio生效。
插件使用方式:光标移动到布局文件的位置,例如:setContentView(R.layout.activity_main);
,鼠标放到activity_main
上,快键键Alt + Insert
,选择Generate ButterKnife Injections
5、在Library内部使用视图注入
正确配置gradle之后,依然报错 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
,ButterKnife应该在使用的module进行gradle配置,不能在依赖的library间接的使用
library 项目中使用butterknife时,R.id.tv,底下会有红线,提示“元素值必须为常量表达式”
原因:在一般的Android项目中,R类的常量都是用final定义的,但ADT 14之后,如果在library 项目中,它会没有final关键字,在这里要用R2替换R即可,为R2.id.tv
在 library 项目中,有多个onclick点击事件,不能使用case R.id.iv_back,与上面报一样的错误,原因也同上。在switch语句的case中,如果使用 R.id.xxx 则会提示有问题,不允许非常量在case语句中。AndroidStudio中,在switch上面按下Alt+Enter键有将Switch转换成if-else的选项。
本意在公共的library进行butterknife的gradle配置,然后程序入口的module依赖这个公共的library,从来达到不用每个module重复依赖的效果,可是失败,总是报空,必须各自依赖
记录完毕