刚开始使用ButterKnife的时候很多人可能会遇到NullPointerException或者“找不到符号”,这皆是由于ButterKnife配置有误。下面我们来详细的来说明ButterKnife的配置
首先我们需要导入ButterKnife
如图
也可以在这里添加
同时还需要安装ButterKnife的插件
这里我已经安装好了,看起来有一些不同。没安装的时候先搜索然后点下面的按钮就会出来了
然后配置
注意,这里如果没有完成上面安装插件的步骤会无法识别apt()
还不理解的话,下面就贴出完整的build.gradle吧
1 // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 3 buildscript { 4 repositories { 5 jcenter() 6 } 7 dependencies { 8 classpath 'com.android.tools.build:gradle:2.1.0' 9 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 10 // NOTE: Do not place your application dependencies here; they belong 11 // in the individual module build.gradle files 12 } 13 } 14 15 allprojects { 16 repositories { 17 jcenter() 18 } 19 } 20 21 task clean(type: Delete) { 22 delete rootProject.buildDir 23 }
1 apply plugin: 'com.android.application' 2 3 android { 4 compileSdkVersion 23 5 buildToolsVersion "23.0.3" 6 7 defaultConfig { 8 applicationId "com.lcc.fjnu.damuvideobysohu" 9 minSdkVersion 14 10 targetSdkVersion 23 11 versionCode 1 12 versionName "1.0" 13 } 14 buildTypes { 15 release { 16 minifyEnabled false 17 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 } 19 } 20 } 21 22 buildscript { 23 repositories { 24 mavenCentral() 25 } 26 dependencies { 27 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 28 } 29 } 30 31 apply plugin: 'com.neenbedankt.android-apt' 32 33 dependencies { 34 compile fileTree(include: ['*.jar'], dir: 'libs') 35 testCompile 'junit:junit:4.12' 36 compile 'com.android.support:appcompat-v7:23.3.0' 37 compile 'com.android.support:design:23.3.0' 38 compile 'com.jakewharton:butterknife:8.1.0' 39 apt 'com.jakewharton:butterknife-compiler:8.1.0' 40 }
以上就是配置的过程
再说一点ButterKnife8.1.0的绑定方法是@BindView 之前的版本是@Bind,再之前是@InjectView.
具体的说明可以参照其官网(未墙) http://jakewharton.github.io/butterknife/
这里会给出一个简单的范例:
1 public class MainActivity extends AppCompatActivity { 2 3 @BindView(R.id.toolbar) 4 Toolbar mToolbar; 5 @BindView(R.id.tabs) 6 TabLayout mtabs; 7 @BindView(R.id.appbar) 8 AppBarLayout mappbar; 9 @BindView(R.id.container) 10 ViewPager container; 11 @BindView(R.id.fab) 12 FloatingActionButton fab; 13 ......}
不需要重新实例化以及findviewbyid(),代码变得更简洁明了